使用正则表达式从字符串中排除特定字符

时间:2012-04-27 15:55:07

标签: php regex

我有一个正则表达式,从字符串中提取键入的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);

2 个答案:

答案 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);