匹配PHP标记之外的text / html

时间:2013-01-15 15:08:50

标签: php html regex tags

我正在寻找解决方案。可以很容易地选择PHP标签内的所有内容(基本上),但我似乎无法相反地工作。

首先,我认为这样可行:

/\?>(?<html>.*?)<\?|^(.*?)(?=<\?)|(?<=\? >)(.*?)$/

(介于?&gt;和\&lt; \?之间的所有内容,^和\&lt; \?之间的所有内容,以及?&gt;和$之间的所有内容)

但是在这里,问题是一个以<?php开头的文件,并且在文件结束之前没有一个其他结束标记失败。

在一天结束时,我想要匹配<? ... ?>

之外的所有内容
THIS,<?php ... ?>
THIS<?php ... ?>
AND THIS

有没有人有想法?感谢。

1 个答案:

答案 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

)