我需要一大堆HTML文件来解析<? and ?>
标记,记住<?xml
以及开放<?php
标记不需要的事实结束标记...... EOF也计算在内。
我的正则表达知识无可否认:/<\?[^(\?>)]*\?>/
示例HTML:
<?
function trans($value) {
// Make sure it does not translate the function call itself
}
?>
<!-- PHP
code -->
<div id='test' <?= $extraDiv ?>>
<?= trans("hello"); ?>
<? if ($something == 'hello'): ?>
<? if ($something == 'hello'): ?>
<p>Hello</p>
<? endif; ?>
<?php
// Some multiline PHP stuff
echo trans("You are \"great'"); // I threw some quotes in to toughen the test
echo trans("Will it still work with two");
echo trans('and single quotes');
echo trans("multiline
stuff
");
echo trans("from array('test')",array('test'));
$counter ++;
?>
<p>Smart <?= $this->translation ?> time</p>
<p>Smart <?=$translation ?> time</p>
<p>Smart <?= $_POST['translation'] ?> time</p>
</div>
<?
trans("This php tag has no end");
希望数组:
[0] => "<?
function trans($value) {
// Make sure it does not translate the function call itself
}
?>",
[1] => "<?= $extraDiv ?>",
[2] => etc...
答案 0 :(得分:2)
不,这不是角色类的工作方式。幸运的是,您不必担心这一点,因为我们可以使用?
来使字符类非贪婪。我还会在末尾添加s
,以便.
也可以匹配换行符,但通常不能。{/ p>
/<\?(.*?)\?>/s
答案 1 :(得分:0)
看起来你正在寻找的是前瞻和后瞻。这些正则表达式运算符基本上允许您在搜索中包含文本,但在最终结果中省略它。
首先,您要将正则表达式更改为:
'/(?<=\<\?)[^(\?\>)]*(?=\?\>)/'
对于EOF,您使用$符号。因此:
'/(?<=\<\?)[^(\?\>)]*(?=\?\>|$)/'
我没有对此进行测试,但我认为应该做你想要的,或者至少指出你正确的方向。