我有一个正则表达式,从字符串中提取键入的URL(可能包含键入的URL的描述文本)并将它们转换为href。这一切都很好,除了这样一个事实,即当键入一个URL并且它的最后一个字符是“,”“)”时,它也将此字符作为URL的一部分。我怎么能阻止这个?
示例文字:
嗨,这是我的精彩信息,其中包含一个链接(请参阅www.website.com)以及更多信息。
我的正则表达式读取URL但在创建href时也会使用最后一个字符“)”,从而导致链接错误。
My Regex:
preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
答案 0 :(得分:1)
在URL终止字符列表中包含“,”和“)”。别忘了用反斜杠逃避“)”。换句话说,尝试:
preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< \),]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
(我没有测试过这个。)
答案 1 :(得分:1)
看起来你在url.try之后匹配任何东西。
preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ][^\,)]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);