首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式匹配与替换

问正则表达式匹配与替换
EN

Stack Overflow用户
提问于 2021-01-04 17:26:22
回答 1查看 77关注 0票数 1

在Php中,我希望开发具有多语言的hashtag系统,因为我将使用正则表达式机制,用于散列标签拆分和用超链接替换文本。

第一阶段哈希匹配将对给定代码起作用

代码语言:javascript
复制
$str = '#தமிழ் மாதங்களின் #வரலாறு';
preg_match_all('/#[^\s#]*/i', $str, $mat);

$mat数组在输入字符串中包含所有散列标记,如数组(-#தமிழ்,1 -#வரலாறு)

第二阶段,如果正则表达式替换函数的结果为空,则使用超链接替换散列标记,如下所示

代码语言:javascript
复制
$str = '#தமிழ்,#வரலாறு';
$expression = "/#[^\s#]*/i";        
$string = preg_replace($expression, '<a href="https://www.example.com/hash_tag?tag=$1">$0</a>', $str);

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

如何修复这个正则表达式替换条件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-04 18:07:45

在模式/#[^\s#]*/i中,您不需要/i,因为被取反的字符类匹配除#或包含大小写字符的空白字符之外的任何字符。

在替换中,您使用$0和$1,它们是完全匹配和捕获组1。但该模式当前没有捕获组。

如果完全匹配应包括#和不包括它的组1,则可以将模式更改为#([^\s#]+),并重复字符类1+多次,以匹配#之后的至少一个字符

您可以不使用preg_match_all而只使用preg_replace

代码语言:javascript
复制
echo preg_replace(
    '/#([^\s#]+)/',
    '<a href="https://www.example.com/hash_tag?tag=$1">$0</a>',
    '#தமிழ் மாதங்களின் #வரலாறு'
);

输出

代码语言:javascript
复制
<a href="https://www.example.com/hash_tag?tag=தமிழ்">#தமிழ்</a> மாதங்களின் <a href="https://www.example.com/hash_tag?tag=வரலாறு">#வரலாறு</a>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65560311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档