繁体   English   中英

正则表达式捕获带有{{}}符号的奇怪字符串

[英]Regex catching a weird string with {{ }} signs

字符串示例

{{ai|Perseverance|Garen}} is no longer removed by combat dehancing effects such as {{ai|Blood Scent|Warwick}}.

我要赶{{ai|Perseverance|Garen}}从这个{{ai| |Garen}} {{ai| |Garen}} ,中间部分与{{ai| |Warwick}} {{ai| |Warwick}}

这是我想出的:

(\{\{ai\|)\w+(\|\w+\}\})

它很可能会干扰第一个,但是有了Perserverance,我可以做两次正则表达式来摆脱第一个{{ai| and then |Garen}} {{ai| and then |Garen}}使用(\\{\\{ai\\|) ,然后再使用(\\|\\w+\\}\\})

有没有办法在一个正则表达式中做到这一点?

更新:我正在使用PHP,只是为了清楚

您的比赛在以下正则表达式的第1组中

\{\{[^|]*\|([^|]*)

我假设您想删除{{some| |thing}}部分,并保留中间的内容。

您可以使用

{{[^|]*\|([^|]*)\|[^|]*}}

$1作为替换模式。

正则表达式表示:

  • {{ -两个文字{符号
  • [^|]*\\| -除|以外的零个或多个字符 (带有[^|]* ),后跟文字|
  • ([^|]*) -匹配零个或多个除|以外的字符的组1
  • \\| -文字|
  • [^|]* -再次为零或多个除|以外的字符
  • }} -关闭}}

观看演示

请注意,当3 | {{ / }}分隔的部分。

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

$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM