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