PHP如何同时移除括号、方括号内文本及前置可选空格
解决PHP字符串清理问题:移除括号及内部内容
你的问题出在原正则表达式的匹配逻辑上——[^)]+是匹配所有非右圆括号的字符,而不是你需要的非右方括号的字符,这就导致它错误地把[Region 4](Blu-ray这一段(从[到第一个)前的内容)当成了匹配目标,才出现了奇怪的输出。
要同时移除方括号[]、圆括号()及其内部的文本,还要处理它们前面的可选空格,你可以用这个优化后的正则:
$string = "Deadpool 2 [Region 4](Blu-ray)"; // 全局匹配并替换两种括号结构及前面的可选空格 $cleanedString = preg_replace('/\s*(?:\[[^\]]+\]|\([^)]+\))/', '', $string); echo $cleanedString; // 输出: Deadpool 2
正则表达式详解:
\s*:匹配0个或多个空格,用来处理括号前可能存在的可选空格(?:...):非捕获分组,用来把两种括号模式组合在一起,避免生成不必要的捕获组\[[^\]]+\]:精准匹配方括号及其内部内容——\[匹配左方括号,[^\]]+匹配所有非右方括号的字符,\]匹配右方括号\|:逻辑“或”,用来同时匹配方括号和圆括号两种结构\([^)]+\):精准匹配圆括号及其内部内容——\(匹配左圆括号,[^)]+匹配所有非右圆括号的字符,\)匹配右圆括号
这样替换后,所有带括号的冗余内容(包括前面的空格)都会被移除,正好得到你想要的Deadpool 2。
内容的提问来源于stack exchange,提问作者snowflakes74
相关产品推荐
相关产品推荐

