如何解决正则表达式匹配与替换
在PHP中,我希望开发多语言的hashtag系统,为此我将使用正则表达式机制,对hash tag进行拆分并用超链接替换文本。
第一阶段哈希匹配适用于给定的代码
$str = '#தமிழ் மாதங்களின் #வரலாறு';
preg_match_all('/#[^\s#]*/i',$str,$mat);
$mat 数组在输入字符串中包含所有哈希标签,例如 array([0]-#தமிழ்,[1] -#வரலாறு)
第二阶段用超链接替换hash标签,给出如下正则表达式替换函数的空结果
$str = '#தமிழ்,#வரலாறு';
$expression = "/#[^\s#]*/i";
$string = preg_replace($expression,'<a href="https://www.example.com/hash_tag?tag=$1">$0</a>',$str);
我的预期结果是 #தமிழ் மாதங்களின் #வரலாறு
如何解决这个正则表达式替换条件?
解决方法
在模式 /#[^\s#]*/i
中,您不需要 /i
,因为否定字符类匹配除 #
或包含大写和小写字符的空白字符之外的任何字符。>
在替换中,您使用 $0
和 $1
,它们是完全匹配和捕获组 1。但该模式当前没有捕获组。
如果完整匹配应该包括#
而没有它的组1,您可以将模式更改为#([^\s#]+)
并重复字符类1+次以匹配{{之后的至少一个字符1}}
您可以省略使用 #
而只使用 preg_replace:
preg_match_all
输出
echo preg_replace(
'/#([^\s#]+)/','<a href="https://www.example.com/hash_tag?tag=$1">$0</a>','#தமிழ் மாதங்களின் #வரலாறு'
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。