仅当内部字符超过一个时才删除括号

问题描述 投票:0回答:1

仅当括号内的文本超过一个字符时,我才想删除它们。

我的输入是:

$string = "Model name (4) Color (Additional Params)"

我想要的最终输出字符串应该是:“型号名称(4)颜色附加参数”。

我的解决方法是:

  1. 使用正则表达式\([^)]{2,}\)检测所需的作用域。
  2. 从原始字符串中切除。
  3. 删除括号。
  4. 回到原始字符串。

我知道正则表达式具有条件语句。但是我不明白使用它们的逻辑。

是否可以使用单个正则表达式,怎么做?

php regex pcre
1个回答
0
投票

可以使用一个正则表达式:

$string = 'Model name (4) Color (Additional Params) and some other (a) with more (params)';
$modifiedString = preg_replace('/\(([^\(\)]{2,})\)/', '$1', $string);
var_dump($modifiedString);

这将给:

string(74)“型号名称(4)颜色附加参数和其他(a)具有更多参数”

模式说明:

  • [\(-匹配文字开头括号
  • [^\(\)]-匹配不是开头或结尾括号的任何字符(我们需要这样做,因此它不会匹配第一个开头和最后一个括号之间的所有字符-(4) Color (Additional Params)
  • 后跟一个量词{2,},表示我们要匹配其中两个或多个
  • 与量词一起用括号括起来,形成一个捕获组([^\(\)]{2,})-这将获得字符串中括号的全部内容
  • 最后我们匹配\)文字右括号

preg_replace调用中的第二个参数定义为用捕获组(Additional params)替换我们的完全匹配Additional params

© www.soinside.com 2019 - 2024. All rights reserved.