正则表达式匹配与替换
Regular Expression match vs replace
在Php我想开发多语言的hashtag系统,为此我会使用正则表达式机制,hash tag拆分并用超链接替换文本。
第一阶段哈希匹配将适用于给定的代码
$str = '#தமிழ் மாதங்களின் #வரலாறு';
preg_match_all('/#[^\s#]*/i', $str, $mat);
$mat 数组包含输入字符串中的所有哈希标签,如数组([0]-#தமிழ்,[1] -#வரலாறு )
第二阶段用超链接替换散列标签,正则表达式替换函数的结果为空,如下所示
$str = '#தமிழ்,#வரலாறு';
$expression = "/#[^\s#]*/i";
$string = preg_replace($expression, '<a href="https://www.example.com/hash_tag?tag=">[=11=]</a>', $str);
我的预期结果是
#தமிழ் மாதங்களின்
#வரலாறு
如何修复此正则表达式替换条件?
在模式 /#[^\s#]*/i
中,您不需要 /i
,因为否定字符 class 匹配除 #
以外的任何字符或包含大写和小写字符。
在替换中,您使用 [=15=]
和 </code>,它们是完全匹配和捕获组 1。但该模式目前没有捕获组。</p>
<p>如果完整匹配应该包括 <code>#
而第 1 组没有它,您可以将模式更改为 #([^\s#]+)
并重复字符 class 1+ 次以至少匹配#
之后的一个字符
您可以省略使用 preg_match_all
并仅使用 preg_replace:
echo preg_replace(
'/#([^\s#]+)/',
'<a href="https://www.example.com/hash_tag?tag=">[=10=]</a>',
'#தமிழ் மாதங்களின் #வரலாறு'
);
输出
<a href="https://www.example.com/hash_tag?tag=தமிழ்">#தமிழ்</a> மாதங்களின் <a href="https://www.example.com/hash_tag?tag=வரலாறு">#வரலாறு</a>
在Php我想开发多语言的hashtag系统,为此我会使用正则表达式机制,hash tag拆分并用超链接替换文本。
第一阶段哈希匹配将适用于给定的代码
$str = '#தமிழ் மாதங்களின் #வரலாறு';
preg_match_all('/#[^\s#]*/i', $str, $mat);
$mat 数组包含输入字符串中的所有哈希标签,如数组([0]-#தமிழ்,[1] -#வரலாறு )
第二阶段用超链接替换散列标签,正则表达式替换函数的结果为空,如下所示
$str = '#தமிழ்,#வரலாறு';
$expression = "/#[^\s#]*/i";
$string = preg_replace($expression, '<a href="https://www.example.com/hash_tag?tag=">[=11=]</a>', $str);
我的预期结果是 #தமிழ் மாதங்களின் #வரலாறு
如何修复此正则表达式替换条件?
在模式 /#[^\s#]*/i
中,您不需要 /i
,因为否定字符 class 匹配除 #
以外的任何字符或包含大写和小写字符。
在替换中,您使用 [=15=]
和 </code>,它们是完全匹配和捕获组 1。但该模式目前没有捕获组。</p>
<p>如果完整匹配应该包括 <code>#
而第 1 组没有它,您可以将模式更改为 #([^\s#]+)
并重复字符 class 1+ 次以至少匹配#
您可以省略使用 preg_match_all
并仅使用 preg_replace:
echo preg_replace(
'/#([^\s#]+)/',
'<a href="https://www.example.com/hash_tag?tag=">[=10=]</a>',
'#தமிழ் மாதங்களின் #வரலாறு'
);
输出
<a href="https://www.example.com/hash_tag?tag=தமிழ்">#தமிழ்</a> மாதங்களின் <a href="https://www.example.com/hash_tag?tag=வரலாறு">#வரலாறு</a>