首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex捕捉带有{}符号的奇怪字符串

Regex捕捉带有{}符号的奇怪字符串
EN

Stack Overflow用户
提问于 2016-01-03 19:14:42
回答 2查看 66关注 0票数 1

字符串示例

代码语言:javascript
复制
{{ai|Perseverance|Garen}} is no longer removed by combat dehancing effects such as {{ai|Blood Scent|Warwick}}.

我想从这个{{ai|Perseverance|Garen}}中捕获{{ai| |Garen}},并保持中间部分与{{ai| |Warwick}}相同。

这就是我想出来的:

代码语言:javascript
复制
(\{\{ai\|)\w+(\|\w+\}\})

这是相当接近它上下班的第一个,但使用Perserverance,我可以做两次regex,以摆脱第一个{{ai| and then |Garen}}首先使用(\{\{ai\|),然后(\|\w+\}\})

有没有办法在一次审判中做到这一点?

更新:我使用PHP只是为了澄清

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-03 20:06:58

我假设您希望删除{{some||thing}}部件,并保持中间位置。

您可以使用

代码语言:javascript
复制
{{[^|]*\|([^|]*)\|[^|]*}}

$1为替代模式。

regex指的是:

  • {{ -两个文字{符号
  • [^|]*\| -除|以外的零或多个字符(带[^|]*),后面跟着文字|
  • ([^|]*) -与|以外的零或多个字符匹配的第1组
  • \| -文字|
  • [^|]* --除了|之外,还是零或多个字符
  • }} -关闭}}

请参阅演示

注意,当|/}}中有3个-separated部件时,它就能工作。

在PHP中,您可以使用以下代码

代码语言:javascript
复制
$re = '~{{[^|]*\|([^|]*)\|[^|]*}}~'; 
$str = "{{ai|Perseverance|Garen}} is no longer removed by combat dehancing effects such as {{ai|Blood Scent|Warwick}}"; 
$result = preg_replace($re, '\1', $str);
echo $result;
// => Perseverance is no longer removed by combat dehancing effects such as Blood Scent
票数 1
EN

Stack Overflow用户

发布于 2016-01-03 19:18:36

您的匹配处于下列正则表达式的第1组中

代码语言:javascript
复制
\{\{[^|]*\|([^|]*)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34580532

复制
相关文章

相似问题

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