在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);
我的预期结果是 #தமிழ் மாதங்களின் #வரலாறு
如何解决这个正则表达式替换条件?
答案 0 :(得分:0)
在模式 /#[^\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>',
'#தமிழ் மாதங்களின் #வரலாறு'
);