仅当内部字符超过一个时才删除括号
Remove parantheses only if inside characters more than one
我只想删除括号内超过一个文本字符的括号。
我的输入是:
$string = "Model name (4) Color (Additional Params)"
我想要的最终输出字符串应该是:"Model name (4) Color Additional Params".
我的解决方案是:
- 使用正则表达式检测所需范围
\([^)]{2,}\)
。
- 从原始字符串中剪切。
- 删除括号。
- 附加回原始字符串。
我知道正则表达式有条件语句。但我无法理解使用它们的逻辑。
是否可以使用单个正则表达式以及如何处理?
可以用一个正则表达式来完成:
$string = 'Model name (4) Color (Additional Params) and some other (a) with more (params)';
$modifiedString = preg_replace('/\(([^\(\)]{2,})\)/', '', $string);
var_dump($modifiedString);
这将给出:
string(74) "Model name (4) Color Additional Params and some other (a) with more params"
模式说明:
\(
- 匹配文字左括号
[^\(\)]
- 匹配任何不是左括号或右括号的字符(我们需要这样做,这样它就不会匹配第一个左括号和最后一个右括号之间的所有字符 - (4) Color (Additional Params)
)
- 后面跟着一个量词
{2,}
,表示我们要匹配其中的两个或多个
- 连同它被包裹在括号中的量词,形成一个捕获组:
([^\(\)]{2,})
- 这将得到字符串[=中括号的全部内容36=]
- 最后我们匹配
\)
文字右括号
preg_replace
调用中的第二个参数定义用捕获组 Additional params
.
替换我们的完整匹配项 (Additional params)
我只想删除括号内超过一个文本字符的括号。
我的输入是:
$string = "Model name (4) Color (Additional Params)"
我想要的最终输出字符串应该是:"Model name (4) Color Additional Params".
我的解决方案是:
- 使用正则表达式检测所需范围
\([^)]{2,}\)
。 - 从原始字符串中剪切。
- 删除括号。
- 附加回原始字符串。
我知道正则表达式有条件语句。但我无法理解使用它们的逻辑。
是否可以使用单个正则表达式以及如何处理?
可以用一个正则表达式来完成:
$string = 'Model name (4) Color (Additional Params) and some other (a) with more (params)';
$modifiedString = preg_replace('/\(([^\(\)]{2,})\)/', '', $string);
var_dump($modifiedString);
这将给出:
string(74) "Model name (4) Color Additional Params and some other (a) with more params"
模式说明:
\(
- 匹配文字左括号[^\(\)]
- 匹配任何不是左括号或右括号的字符(我们需要这样做,这样它就不会匹配第一个左括号和最后一个右括号之间的所有字符 -(4) Color (Additional Params)
)- 后面跟着一个量词
{2,}
,表示我们要匹配其中的两个或多个 - 连同它被包裹在括号中的量词,形成一个捕获组:
([^\(\)]{2,})
- 这将得到字符串[=中括号的全部内容36=] - 最后我们匹配
\)
文字右括号
preg_replace
调用中的第二个参数定义用捕获组 Additional params
.
(Additional params)