1

我正在为此寻找解决方案。选择 PHP 标记内的所有内容很容易(基本上),但我似乎无法得到相反的结果。

首先,我认为这会奏效:

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

(?> 和 \<\? 之间的所有内容,^ 和 \<\? 之间的所有内容, ?> 和 $ 之间的所有内容)

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

归根结底,我只想匹配<? ... ?>

THIS,<?php ... ?>
THIS<?php ... ?>
AND THIS

有人有想法吗?谢谢。

4

1 回答 1

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

)
于 2013-01-15T22:53:19.840 回答