【问题标题】:Matching contents inside php tags using regex使用正则表达式匹配 php 标签内的内容
【发布时间】:2009-09-10 14:43:24
【问题描述】:

我在匹配 php 标签中的内容时遇到了一些问题。

目前我有这个代码,但它不适合我:

<?php preg_match_all('/<\?php(.+)\?>/', $str, $inside_php); ?>

我需要检索内容,以便对它们执行其他操作,例如 eval()。

【问题讨论】:

    标签: php regex tags pcre


    【解决方案1】:

    停在那里,你不想这样!

    您可以使用tokenizer extension of PHP 将字符串分解为标记,这样可以可靠地找到所有 PHP 源代码。然后,您可以使用令牌进行任何您想要的转换。正则表达式不是这项工作的工具(你不会想用勺子灭火吧?)

    $tokens = token_get_all($string);
    foreach ($tokens as $token) {
        if (is_array($token)) {
            if (!in_array($token[0], array(T_INLINE_HTML, T_OPEN_TAG, T_CLOSE_TAG))) {
                echo $token[1];
            }
        } else {
            echo $token;
        }
    }
    

    【讨论】:

    • 或者您是否已经考虑过短标签?还是在字符串中打开 php 标签?
    • 对不起,我错过了你的答案。非常感谢,这太棒了!
    • 第 4 行有一个类型,我认为 $oken[0] 应该是 $token[0]。再次感谢您,这对我很有帮助!
    【解决方案2】:

    句点(或点)与新行不匹配:

    ([.\n\r]+)
    

    这样做^^

    <?php preg_match_all('/<\?php([.\n\r]+)\?>/', $str, $inside_php); ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多