【问题标题】:preg_match works in regexbuddy, not in phppreg_match 在 regexbuddy 中工作,而不是在 php 中
【发布时间】:2009-01-27 04:44:32
【问题描述】:

好的,所以我创建了这个正则表达式,它在 RegexBuddy 中运行良好,但在我将其加载到 php 时却不行。下面是一个例子。

使用 RegexBuddy 我可以让它与这个一起工作:

\[code\](.*)\[/code\]

检查点是否匹配换行符,我添加了不区分大小写的,但它也可以这样工作。

这里是php:

$q = "[code]<div>html code to display on screen</div>[/code]";

$pattern = '/\[code\](.*)\[/code\]/si';

$m = preg_match($pattern, $q, $code);

所以你可以看到我正在使用 [code][/code],然后一旦我可以提取它,我将在其上运行 htmlentities() 以显示而不是渲染 html 代码。

【问题讨论】:

    标签: php regex pcre regexbuddy


    【解决方案1】:

    您在模式 (/code) 的中间添加了正斜杠。要么逃避它,要么用其他东西来界定你的模式(我更喜欢!)。

    【讨论】:

      【解决方案2】:

      将正则表达式从 RegexBuddy 传输到 PHP 时,可以在 Use 选项卡上生成源代码 sn-p,或者单击顶部工具栏上的 Copy 按钮,然后选择复制为 PHP preg 字符串。然后 RegexBuddy 会自动添加 PHP 需要的分隔符和标志,而不会留下任何未转义的内容。

      【讨论】:

        【解决方案3】:

        这是因为你没有转义结束标记/

        转义反斜杠也不会伤害:

        $pattern = "/\\[code\\](.*)\\[\\/code\\]/si";
        

        PHP 允许您选择任何字符作为正则表达式的分隔符,因此我会经常使用在正则表达式中不使用的字符,例如 @

        $pattern = "@\\[code\\](.*)\\[/code\\]@si";
        

        【讨论】:

          【解决方案4】:

          这行得通:

          $pattern = '/\[code\](.*)\[\/code\]/si';
          

          【讨论】:

            【解决方案5】:

            您需要在 /code 中转义正斜杠

            $pattern = '/\[code\](.*)\[\/code\]/si';
            

            另外,实现匹配存储在 $code,而不是 $m

            编辑:被打败了:p

            【讨论】:

            • yup $m 只是调试的一部分,以了解它是真是假
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-19
            • 1970-01-01
            • 2017-10-27
            相关资源
            最近更新 更多