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

Php 使用正则表达式从字符串中排除特定字符,php,regex,Php,Regex,我有一个正则表达式,它从字符串(一个可能包含键入URL的描述文本)中提取键入URL,并将其转换为href。这一切都可以很好地工作,除了这样一个事实:当一个URL被键入时,它的最后一个字符是“,”of“),它也将这个字符作为URL的一部分。我怎样才能防止这种情况 示例文本: 您好,这是我的美丽的消息,其中包含一个链接(见www.website.com)和一些更多信息 我的正则表达式在创建href时会读取URL,但也会使用最后一个字符“)”,从而导致链接错误 我的正则表达式: preg_replac

我有一个正则表达式,它从字符串(一个可能包含键入URL的描述文本)中提取键入URL,并将其转换为href。这一切都可以很好地工作,除了这样一个事实:当一个URL被键入时,它的最后一个字符是“,”of“),它也将这个字符作为URL的一部分。我怎样才能防止这种情况

示例文本:

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

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

我的正则表达式:

preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
preg#u replace(“#(^|[\n])((www ^ ftp)\.[^\”\t\n\r<]*)#“,“\\1”,$text);
在URL终止字符列表中包括“,”和“)”。不要忘记用反斜杠转义“)”。换句话说,请尝试:

preg#u replace(“#(^|[\n])((www ^ ftp)\.[^\”\t\n\r<\),]*)#“,“\\1”,$text)


(我还没有测试过。)

看起来你在url后面匹配了任何内容。试试这个

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