【问题标题】:match specific word between brackets匹配括号中的特定单词
【发布时间】:2014-04-28 13:39:00
【问题描述】:

我需要匹配和替换括号之间的特定单词(包括括号)。 像这样:

xxx(xxxxSPECIFICWORDxxxxxxxxxxx)xxx

我需要替换这个:

(xxxxSPECIFICWORDxxxxxxxxxxx)

我的文字看起来像这样:

xx(xxxx)xxxx(xxxxxxxx)xxx(xxx)xxx(xxxxSPECIFICWORDxxxxxxxxxxx)xxx

我尝试使用 preg_replace 编写正则表达式,问题是它将第一个括号中的所有文本替换到我的最后一个特定单词括号。我真的不知道该怎么办,有人可以帮我吗?

谢谢。

【问题讨论】:

  • 您对文本的预期结果是什么?目前尚不清楚您是要替换xxxWORDxxx,还是只替换WORD,或完全替换(xxxWORDxxx)
  • 我要替换 (xxxWORDxxx)

标签: regex preg-replace brackets


【解决方案1】:

丹尼斯,使用这个简单的正则表达式:

\([^(]+SPECIFICWORD[^)]+\)

这是一个演示:

<?php
$string = "xx(xxxx)xxxx(xxxxxxxx)xxx(xxx)xxx(xxxxSPECIFICWORDxxxxxxxxxxx)xxx";
$regex="~\([^(]+SPECIFICWORD[^)]+\)~";
echo preg_replace($regex,"\1NEWWORD",$string);
?>

输出:

xx(xxxx)xxxx(xxxxxxxx)xxx(xxx)xxxNEWWORDxxx

【讨论】:

  • @DennisAvshalom 不客气,很高兴为您提供帮助。 :)
【解决方案2】:

你可以使用这个正则表达式:

\(.*?SpecificWord.*?\)

并将其替换为:

any other string

【讨论】:

  • 它只替换特定的单词,我需要替换存在特定单词的括号内的所有内容,包括括号。 xxx(yyySPECIFWORDyy)xxx => xxxREPLACExxx。我尝试了 '~(.*?)((.*SPECIFICWORD.*))(.*?)~' 但它替换了文本中第一个括号中的所有内容。 tnx 4 尝试
  • 应该说明.* 是“贪婪”的,这意味着它将尽可能多地使用字符,包括任何括号。所以这就是为什么它在您第一次尝试时从第一个括号开始,而不是按照您的意图在您的单词之前的第一个括号开始。问号使其匹配尽可能少的字符。你也可以写\([^(]*SpecificWord[^)]*\) 来达到同样的效果。
  • @SvenS,太好了!谢谢;)
猜你喜欢
  • 2021-02-10
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多