在Php中,我希望开发具有多语言的hashtag系统,因为我将使用正则表达式机制,用于散列标签拆分和用超链接替换文本。
第一阶段哈希匹配将对给定代码起作用
$str = '#தமிழ் மாதங்களின் #வரலாறு';
preg_match_all('/#[^\s#]*/i', $str, $mat);$mat数组在输入字符串中包含所有散列标记,如数组(-#தமிழ்,1 -#வரலாறு)
第二阶段,如果正则表达式替换函数的结果为空,则使用超链接替换散列标记,如下所示
$str = '#தமிழ்,#வரலாறு';
$expression = "/#[^\s#]*/i";
$string = preg_replace($expression, '<a href="https://www.example.com/hash_tag?tag=$1">$0</a>', $str);我预期的结果是#தமிழ்மாதங்களின்#வரலாறு
如何修复这个正则表达式替换条件?
发布于 2021-01-04 18:07:45
在模式/#[^\s#]*/i中,您不需要/i,因为被取反的字符类匹配除#或包含大小写字符的空白字符之外的任何字符。
在替换中,您使用$0和$1,它们是完全匹配和捕获组1。但该模式当前没有捕获组。
如果完全匹配应包括#和不包括它的组1,则可以将模式更改为#([^\s#]+),并重复字符类1+多次,以匹配#之后的至少一个字符
您可以不使用preg_match_all而只使用preg_replace
echo preg_replace(
'/#([^\s#]+)/',
'<a href="https://www.example.com/hash_tag?tag=$1">$0</a>',
'#தமிழ் மாதங்களின் #வரலாறு'
);输出
<a href="https://www.example.com/hash_tag?tag=தமிழ்">#தமிழ்</a> மாதங்களின் <a href="https://www.example.com/hash_tag?tag=வரலாறு">#வரலாறு</a>https://stackoverflow.com/questions/65560311
复制相似问题