如何用PHP中的链接和标签替换纯文本url


How to replace plain text URLs with links and hashtags in PHP

我正在尝试将纯文本转换为链接,标签和@tags。我已经设法部分地做到了这一点,但无法找到任何区分hashtag和包含hash的链接的方法。

我是新的使用正则表达式,所以它可能有点乱!

//link
$message = preg_replace('/((http(s)?)(':'/'/)|(www'.))([a-zA-Z0-9_'-'.'/'&'%'?'='+'#':';'~'[']'!','@'$'''(')'*]+)/', '<a href="http$3://$5$6">$0</a>', $message );
//handle
$message = preg_replace('/[@]+([A-Za-z0-9-_]+)/', '<a href="#$1">$1</a>', $message );
//hashtag
$message = preg_replace('/[#]+([A-Za-z0-9-_]+)/', '<a href="#$1">$1</a>', $message );

纯文本按需要转换为链接,然后在散列点断开。

的文本:

www.hello.com/about_us/test%20page/test-page.php头?这= 12345,= YES

实际文本:

头?这= 12345,= YES "> www.hello.com/about_us/test%20page/test-page.php头?这= 12345,,= YES

在将哈希转换为标签之前,是否有任何方法可以检查该哈希是否是URL的一部分?

标签的正则表达式是:

/[#]+([A-Za-z0-9-_]+)/

您声明的目标是确保它不是URL的一部分,您通过:

标识URL。
/https?':'/'//

你可以试着用否定的回望:

/(?<!https?':'/'/)[^#]*[#]+([A-Za-z0-9-_]+)

这是不够的,所有的一般情况下,但它听起来像你试图解决一个问题在你的控制范围内(一个文本文件,你拥有或什么),所以希望这对你有帮助。

一个适合我的解决方案:

$message = preg_replace('/^(?<!http)^(?<!www'.)[#]+([A-Za-z0-9-_]+)/', '<a href="#$1">$1</a>', $message );//#hashtag