0

我有一个正则表达式,它从字符串(可能包括输入的 URL 的描述文本)中提取输入的 URL,并将它们转换为 href。这一切都很好,除了当输入 URL 并且它的最后一个字符是“,”或“)”时,它也将此字符作为 URL 的一部分。我怎么能防止这种情况?

示例文本:

嗨,这是我的美丽信息,其中包含一个链接(请参阅 www.website.com)和一些更多信息。

我的正则表达式会读取 URL,但在创建 href 时也会使用最后一个字符“)”,从而导致链接错误。

我的正则表达式:

preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
4

2 回答 2

1

It looks like your matching anything after the url.try this.

preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ][^\,)]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
于 2012-04-27T16:11:08.360 回答
1

在 URL 终止字符列表中包含“,”和“)”。不要忘记用反斜杠转义“)”。换句话说,尝试:

preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< \),]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);

(我没有测试过这个。)

于 2012-04-27T16:06:44.087 回答