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


Exclude specific characters from a string using regex

我有一个正则表达式,可以从字符串中提取键入的URL(可能包含键入的URL的描述文本(并将它们转换为href。这一切都工作正常,除了当键入 URL 并且它的最后一个字符是","的"("时,它也将此字符作为 URL 的一部分。我怎样才能防止这种情况发生?

示例文本:

嗨,这是我美丽的消息,其中包含一个链接(见 www.website.com(和更多信息。

我的正则表达式在创建 href 时读取 URL,但也采用最后一个字符"(",导致链接错误。

我的正则表达式:

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

看起来你在 url 之后匹配了任何内容。

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

在 URL 终止字符列表中包含 ","和"("。不要忘记用反斜杠逃逸"("。换句话说,尝试:

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

(我还没有测试过这个。