PHP REGEX将链接转换为字符串中的超链接-删除最后一个句点


PHP REGEX to convert links to hyperlink in string - remove last period

我有以下代码将链接转换为字符串中的超链接。

$text_block = preg_replace('$('s|^)(https?://[a-z0-9_./?=&-]+)(?![^<>]*>)$i', ' <a href="$2" target="_blank">$2</a> ',$text_block);

但是,如果链接末尾为句点,则类似于"搜索http://google.com.",regex在链接中包含句点。我如何更改上面的regex以查找而不包含句点(如果存在)?

编辑:为了澄清,$text_block是一大块文本,可能包含许多链接。正则表达式需要解析文本块,并查找和转换所有找到的链接。

编辑2:正如下面评论中所指出的,我想你必须考虑到像".co.uk"这样的域名。所以我想它必须查找并删除后面跟着空白的最后一个句点,如果有的话。。。变得棘手。有什么想法吗?

一个不是特别优雅但纯粹的正则表达式解决方案是:

$('s|^)(https?://[a-z0-9_./?=&-]+[a-z0-9_/?=&-])(?![^<>]*>)$i

只需确保最后一个字符是除. 之外的任何有效字符

PHP

$text_block = preg_replace('$('s|^)(https?://[a-z0-9_./?=&-]+[a-z0-9_/?=&-])(?![^<>]*>)$i', ' <a href="$2" target="_blank">$2</a> ',$text_block);

正在RegExr 上工作

试试这个:

$output = rtrim($string, '.');