[英]Regular expression to remove multiple parenthesis
我需要一个正则表达式,如果找到的话,它可以删除字符串中不必要的/多余的括号。
例:
Bob Barker LIVE! (((Don't Miss out!)))
想要的结果:
Bob Barker LIVE! (Don't Miss out!)
我不在乎是否会使用您,只要他们没有过度使用它们,并确保将其关闭即可。
感谢您的任何反馈。
您可以使用正则表达式+递归有效地做到这一点。 这样做直到停止执行任何操作:
s/\\(\\([^()]*)\\)\\)/\\(\\1\\)/g
现在一些评论:
1)我留给您将sed / perl样式转换为PHP样式正则表达式。
2)因为()是特殊字符,所以很难阅读。 基本上我说:“每次更换((...))
与(...)
只要...
不包含任何(
或)
。而且说实话,我没有测试我写下来的烂摊子,但有了这个主意,您应该可以维修。
这总是将它们成对删除。
基本上,这里的道义是:您问了一个简单的正则表达式无法解决的问题-成对删除需要比语言允许的状态更多的状态。 但是,如果您遍历简单的正则表达式并从内而外吃双打,那么这是一个低落的果实。
那很容易。
preg_replace('~[\(\)]+~', '', $string);
编辑:我没有看完你的全部问题。 您仍然需要括号,但不能重复。
preg_replace(array('~\(+~', '~\)+~'), array('(', ')'), $string);
这不适用于嵌套括号,但是使用正则表达式确实很难做到这一点(并且取决于引擎,甚至是不可能的):
preg_replace(array('/\(+/', '/\)+/'), array('(', ')'), $text);
您可以尝试以下方法:
preg_replace("([\\(]{1,})", "(", preg_replace("([\\)]{1,})", ")", $your_string));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.