我正在尝试将纯文本转换为链接,标签和@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