function makeLinks($text) {
$text = preg_replace('%(?<!href=")(((f|ht){1}(tp://|tps://))[-a-zA-^Z0-9@:\%_\+.~#?&//=]+)%i',
'<a href="\\1">\\1</a>', $text);
$text = preg_replace('%([:space:]()[{}])(www.[-a-zA-Z0-9@:\%_\+.~#?&//=]+)%i',
'\\1<a href="http://\\2">\\2</a>', $text);
return $text;
}
如果我有这样的东西,它会错过:- www.website.org
(一个连字符,一个空格)在一行的开头。如果我有 - www.website.org - www.website.org它会抓住第二个。
第二个preg_replace
中的空格不应该涵盖这个吗?
我也试过%(\s\n\r(){})
我正在通过降价运行它,但直到(markdown(makeLinks($foo))
)之后,所以我认为不应该干扰,但是当我关闭降价并且所有内容都只是在一行中回响时,它确实会产生链接他们。如果我放makeLinks(markdown($foo))
它的行为与最初的行为相同..不会在列表项开头用www开头的链接。
答案 0 :(得分:0)
那里有一些非常狡猾的正则表达式。这是一个正则表达式我建议改为URL检测:
%(?<!href="?)(((f|ht)(tp://|tps://))?[a-zA-Z0-9-].[-a-zA-^Z0-9@:\%_\+.~#?&//=]+)%i
应该比现在的两个更可靠。