php - 如何在 PHP 中用链接和主题标签替换纯文本 URL

标签 php regex

我正在尝试将纯文本转换为链接、主题标签和@标签。我已经成功部分地做到了这一点,但找不到任何区分主题标签和包含散列的链接的方法。

我刚开始使用正则表达式,所以它可能有点困惑!

//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#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 的一部分,您可以通过以下方式识别 URL:

/https?\:\/\//

您可以尝试使用负后视:

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

这对于所有一般情况来说还不够,但听起来您正在尝试解决您控制范围内的问题(您拥有的文本文件或其他东西),因此希望这对您有帮助。

关于php - 如何在 PHP 中用链接和主题标签替换纯文本 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201321/

相关文章:

mysql - 用于部分包罗万象的 postfix-mysql 正则表达式

php - WHERE 语句中的 mySql 正则表达式

Java 正则表达式 - 字母数字,最多一个连字符,句点或下划线,七个字符长

php - 如何将 PHP 代码存储在 mysql 表中

javascript - 访问从php发送到js的数组

PHP - error_reporting 不起作用

regex - 帮助解决一组中缺乏值(value)的正则表达式模式

sql - 解释意外的 regexp_replace 结果

php - 防止 Propel 插入空字符串

php - 如果输入 '0',我如何验证 $value 以使其通过?