链接转换preg_match使用markdown

时间:2011-04-25 14:55:21

标签: php url url-rewriting preg-replace markdown

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开头的链接。

1 个答案:

答案 0 :(得分:0)

那里有一些非常狡猾的正则表达式。这是一个正则表达式我建议改为URL检测:

%(?<!href="?)(((f|ht)(tp://|tps://))?[a-zA-Z0-9-].[-a-zA-^Z0-9@:\%_\+.~#?&//=]+)%i

应该比现在的两个更可靠。