我需要一个正则表达式,如果找到,可以删除字符串中不必要的/额外的括号。
例如:
Bob Barker LIVE! (((Don't Miss out!)))
通缉结果:
Bob Barker LIVE! (Don't Miss out!)
我不在乎你是否使用它们,只要它们不过度使用它们,并确保关闭它们。
感谢您的任何反馈。
答案 0 :(得分:2)
您可以使用正则表达式+递归有效地执行此操作。这样做直到它停止做任何事情:
s/\(\([^()]*)\)\)/\(\1\)/g
现在有些评论:
1)我将它留给你将sed / perl风格转换为PHP风格的正则表达式。
2)很难阅读,因为()是特殊字符。基本上我说“只要((...))
不包含任何(...)
或...
,就用(
替换每个)
。说实话我没做过不要测试我写下来的混乱,但有了这个想法,你应该能够修复。
这总是成对地删除它们。
基本上,这里的道德是:你问了一个简单的正则表达式无法解决的问题 - 成对删除需要比语言允许的状态更多的状态。但是,如果你在简单的正则表达式上进行迭代并从内到外吃掉双打,那么这个结果就是昙花一现。
答案 1 :(得分:1)
这很容易。
preg_replace('~[\(\)]+~', '', $string);
编辑:我没有读完你的整个问题。你仍然想要括号,而不是重复。
preg_replace(array('~\(+~', '~\)+~'), array('(', ')'), $string);
答案 2 :(得分:0)
答案 3 :(得分:0)
这对于嵌套括号不起作用,但 很难用正则表达式进行处理(取决于引擎甚至不可能):
preg_replace(array('/\(+/', '/\)+/'), array('(', ')'), $text);
答案 4 :(得分:0)
你可以试试这个:
preg_replace("([\\(]{1,})", "(", preg_replace("([\\)]{1,})", ")", $your_string));