我是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);
有人可以解释一下吗?
感谢。
答案 0 :(得分:3)
简而言之:通过链接替换网址。
详细说明:
第一个正则表达式描述以单词字符([\w]+
)开头的序列,后跟://
,后跟集合[\w\#$%&~/.\-;:=,?@\[\]+]
中的一个或多个字符。
这应该匹配以URL协议/方案开头的网址,例如http://
,https://
或ftp://
。
但它也会匹配javascript://
。这并不好:javascript://%0Aalert%28%22booo%21%22%29
等于JavaScript代码:
//
alert("booo!")
第二个正则表达式描述的是以www.
或ftp.
开头的序列,后面跟着一组[\w\#$%&~/.\-;:=,?@\[\]+]
的一个或多个字符。
这可能应该匹配以www.
或ftp.
开头的网址。然后将URL协议/方案添加到URL。
答案 1 :(得分:2)
获取RegexBuddy,它会向您解释(see screenshots)正则表达式的含义。还有另一个anwser here in SO that demonstrates that。
无论如何,根据preg_replace
的第二个参数,它们应该匹配URL并标记它们。