正则表达式匹配与替换

时间:2021-01-04 09:26:22

标签: php regex multilingual hashtag

在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);

我的预期结果是 #தமிழ் மாதங்களின் #வரலாறு

如何解决这个正则表达式替换条件?

1 个答案:

答案 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>',
    '#தமிழ் மாதங்களின் #வரலாறு'
);