【问题标题】:Match text/html outside of PHP tags匹配 PHP 标签之外的 text/html
【发布时间】:2013-01-15 15:08:50
【问题描述】:

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

首先,我认为这是可行的:

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

(在?> 和\ 和$ 之间的所有内容)

但这里的问题是,以&lt;?php 开头的文件,直到文件末尾都没有其他结束标记,失败了。

归根结底,我只想匹配 &lt;? ... ?&gt; 之外的所有内容

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

有人有想法吗?谢谢。

【问题讨论】:

  • 如果里面的所有内容很容易全选,那你为什么不直接preg_replace那些匹配呢?这样你最终会得到一个只包含 php 标签之外的内容的变量。
  • 因为我仍然需要其余部分保持原样,将其用于 preg_replace_callback。我想操作php标签外的内容,基本不改动代码

标签: php html regex tags


【解决方案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

)

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2011-01-12
    • 2018-07-08
    • 2013-02-12
    相关资源
    最近更新 更多