我有以下代码将链接转换为字符串中的超链接。
$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, '.');