如何在PHP中用链接和哈希标记替换纯文本URL
我正在尝试将纯文本转换为链接、hashtags和@tags。我已经设法部分地做到了这一点,但是找不到任何方法来区分hashtag和包含hash的链接 我刚开始使用正则表达式,所以它可能有点混乱如何在PHP中用链接和哈希标记替换纯文本URL,php,regex,Php,Regex,我正在尝试将纯文本转换为链接、hashtags和@tags。我已经设法部分地做到了这一点,但是找不到任何方法来区分hashtag和包含hash的链接 我刚开始使用正则表达式,所以它可能有点混乱 //link $message = preg_replace('/((http(s)?)(\:\/\/)|(www\.))([a-zA-Z0-9_\-\.\/\&\%\?\=\+\#\:\;\~\[\]\!\,\@\$\'\(\)\*]+)/', '<a href="http$3://$5$
//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 );
//链接
$message=preg\u replace('/((http(s))(\:\/\/)(www\)([a-zA-Z0-9\-.\/\&\%\?\=\+\\\\\:\\\[\]\!\,\@\\\\\\\.*]+','$message);
//处理
$message=preg_replace('/[@]+([A-Za-z0-9-+)/','','$message);
//标签
$message=preg_replace('/[#]+([A-Za-z0-9-#]+)/',''$message);
纯文本根据需要转换为链接,然后在散列点中断
所需文本:
www.hello.com/about_us/test%20page/test page.php#header?this=12345&that=YES
实际文本:
header?this=12345&that=YES“>www.hello.com/about_us/test%20page/test page.php#header?this=12345&that=YES
在将哈希转换为哈希标记之前,有没有办法检查它是否是URL的一部分?哈希标记的正则表达式如下:
/[#]+([A-Za-z0-9-_]+)/
您声明的目标是确保它不是URL的一部分,您可以通过以下方式进行标识:
/https?\:\/\//
你可以试着用消极的眼光看后面:
/(?<!https?\:\/\/)[^#]*[#]+([A-Za-z0-9-_]+)
/(?
这对于所有的一般情况来说都是不够的,但听起来你在试图解决你控制范围内的问题(你拥有的文本文件或其他东西),所以希望这能对你有所帮助。一个对我有效的解决方案:
$message = preg_replace('/^(?<!http)^(?<!www\.)[#]+([A-Za-z0-9-_]+)/', '<a href="#$1">$1</a>', $message );//#hashtag
$message=preg_replace('/^(?非常感谢-我确实需要使用负面回顾,但它也需要使用start with此答案缺少教育性解释。