这些正则表达式模式匹配什么?

时间:2009-05-23 15:36:13

标签: php regex pcre

我是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);

有人可以解释一下吗?

感谢。

2 个答案:

答案 0 :(得分:3)

简而言之:通过链接替换网址。

详细说明:

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

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

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

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

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

答案 1 :(得分:2)

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

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