1

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

有人可以解释一下吗?

谢谢。

4

2 回答 2

3

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

详细地:

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

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

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

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

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

于 2009-05-23T15:54:02.737 回答
2

获取RegexBuddy,它会向您解释(参见屏幕截图)任何正则表达式的含义。SO中有另一个anwser证明了这一点

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

于 2009-05-23T15:49:02.003 回答