我正在寻找解决方案。可以很容易地选择PHP标签内的所有内容(基本上),但我似乎无法相反地工作。
首先,我认为这样可行:
/\?>(?<html>.*?)<\?|^(.*?)(?=<\?)|(?<=\? >)(.*?)$/
(介于?&gt;和\&lt; \?之间的所有内容,^和\&lt; \?之间的所有内容,以及?&gt;和$之间的所有内容)
但是在这里,问题是一个以<?php
开头的文件,并且在文件结束之前没有一个其他结束标记失败。
在一天结束时,我想要匹配<? ... ?>
THIS,<?php ... ?>
THIS<?php ... ?>
AND THIS
有没有人有想法?感谢。
答案 0 :(得分:1)
试试这个
$yourcode = <<<TXT
THIS
,
<?php
... ?>
THIS
<?php
... ?>
THIS TOO
<?php ... ?>AND
THIS
TXT;
preg_match_all('/
(?|
((?:(?!\?>).)+)(?:<\?php) # all chars not containing "?>" sequence until "<?php"
| # or
(?:\?>)((?:(?!\?>).)+)(?:<\?php) # all chars not containing "?>" sequence between "?>" and "<?php"
| # or
(?:\?>)(.+) # all chars after "?>"
)/sx',
$yourcode,
$matches
);
print_r($matches[1]);
您需要的一切都在第一个小组中。 所以输出将是:
Array
(
[0] => THIS
,
[1] =>
THIS
[2] =>
THIS TOO
[3] => AND
THIS
)