仅当括号内的文本超过一个字符时,我才想删除它们。
我的输入是:
$string = "Model name (4) Color (Additional Params)"
我想要的最终输出字符串应该是:“型号名称(4)颜色附加参数”。
我的解决方法是:
\([^)]{2,}\)
检测所需的作用域。我知道正则表达式具有条件语句。但是我不明白使用它们的逻辑。
是否可以使用单个正则表达式,怎么做?
可以使用一个正则表达式:
$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
。