【问题标题】:Why does this PHP regex give me error?为什么这个 PHP 正则表达式会给我错误?
【发布时间】:2009-08-14 08:34:50
【问题描述】:

在正则表达式方面需要一些帮助:

我要换

[url=http://youtube.com]YouTube.com[/url]

<a href="http://youtube.com">YouTube.com</a>

正则表达式

preg_replace("/[url=(.*?)](.*?)[/url]/is", '<a href="$1">$2</a>', $text);

为什么会这样:

警告:preg_replace() [function.preg-replace]:第 18 行 C:\Programa\wamp\www\func.php 中的未知修饰符 'r'

【问题讨论】:

    标签: php regex


    【解决方案1】:

    你应该在你的正则表达式中转义特殊字符:

    preg_replace('/\[url=(.*?)](.*?)\[\/url]/is', '<a href="$1">$2</a>', $text);
    

    我已经转义了 [ 字符(它们指定了字符类的开始)和 / 字符(它指定了正则表达式的边界。)

    或者(对于/ 字符)您可以使用另一个边界字符:

    preg_replace('#\[url=(.*?)](.*?)\[/url]#is', '<a href="$1">$2</a>', $text);
    

    不过,您仍然必须转义 [ 字符。

    【讨论】:

      【解决方案2】:

      PHP 将/url 中的“/”解释为正则表达式的结尾和正则表达式选项的开头。在它之前插入一个“\”,使其成为文字“/”。

      您需要以相同的方式转义“[”(否则它们将被解释为引入了字符类)。

      preg_replace("/\[url=(.*?)](.*?)\[\/url]/is", '<a href="$1">$2</a>', $text);
      

      【讨论】:

      • 点赞:[url=(.*?)](.*?)[\/url]
      【解决方案3】:

      斜线和方括号都是正则表达式中的特殊字符,您需要将它们转义:

      \/ \[ \]
      

      【讨论】:

        【解决方案4】:

        正则表达式字符串中的第二个“/”结束正则表达式。你需要逃避它。此外,preg_replace 会将 '[url=(.*?)]' 解释为字符类,因此您也需要对它们进行转义。

        preg_replace('/\[url=(.*?)\](.*?)\[\/url\]/is', '<a href="$1">$2</a>', $text);
        

        【讨论】:

          【解决方案5】:

          您似乎刚刚开始使用正则表达式。如果是这种情况——或者即使不是——你会发现the Regex Coach 是一个非常有用的工具。它为我们提供了一个沙箱来测试我们的模式匹配和我们的替换字符串。如果您一直在使用它,它将突出显示需要转义特殊字符。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-31
            • 1970-01-01
            相关资源
            最近更新 更多