【问题标题】:What do these regex Patterns Match?这些正则表达式模式匹配什么?
【发布时间】:2009-05-23 15:36:13
【问题描述】:

我是 PHP 正则表达式的新手,了解基本模式,但是下面的模式有点复杂,我不明白以下模式匹配什么:

$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#... "<a href='' rel='nofollow'></a>", $ret);

$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*... "<a href='http://' rel='nofollow'></a>", $ret);

谁能解释一下?

谢谢。

【问题讨论】:

  • 请不要只贴一半。
  • 仅供参考,PCRE 是为 PHP 的 preg_ 函数提供支持的正则表达式库。我删除了该标签,因为您的问题中没有特定于该库的内容。
  • @Alan M:编辑相反,因为它是 Perl 兼容的正则表达式,这是专门被询问的,而不是 PHP 中可用的任何其他正则表达式。 (如果我们真的需要一个关于 PCRE 库的标签,我们可以使用 pcre-lib。)
  • 那么“preg”或“preg_replace”怎么样?在大多数情况下,“pcre”要么是模棱两可的,要么是多余的 IMO。但是“pcre-lib”对于直接使用库的问题听起来不错。我们确实看到了有关这方面的问题。 :)

标签: php regex pcre


【解决方案1】:

简而言之:用链接替换 ​​URL。

详细说明:

  1. 第一个正则表达式描述以单词字符 ([\w]+) 开头的序列,然后是 ://,然后是集合中的一个或多个字符 [\w\#$%&amp;~/.\-;:=,?@\[\]+]

    这应该与以 URL 协议/方案开头的 URL 匹配,例如 http://https://ftp://

    但它也会匹配javascript://。这不好:javascript://%0Aalert%28%22booo%21%22%29 等于 JavaScript 代码:

    //
    alert("booo!")
    
  2. 第二个正则表达式描述以www.ftp. 开头的序列,后跟[\w\#$%&amp;~/.\-;:=,?@\[\]+] 集合中的一个或多个字符。

    这应该匹配以www.ftp. 开头的URL。然后将 URL 协议/方案添加到 URL。

【讨论】:

    【解决方案2】:

    获取RegexBuddy,它会向您解释 (see screenshots) 任何正则表达式的含义。还有一个anwser here in SO that demonstrates that

    无论如何,根据preg_replaces的第二个参数,它们应该匹配URL并标记它们。

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2013-04-19
      • 2018-08-24
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多