【问题标题】:PHP strip all brackets from string [duplicate]PHP从字符串中删除所有括号[重复]
【发布时间】:2013-08-12 10:38:08
【问题描述】:

我的 PHP 脚本调用 Freebase API 并输出一个字符串,该字符串可以包含任意数量的左括号和右括号。每组开然后闭括号本身也可以包含任意数量的开然后闭括号。例如;

$string = "random string blah (a) (b) blah blah (brackets (within) brackets) blah";

我如何使用 PHP 和正则表达式来操作字符串,导致输出不包含任何括号的内容或括号本身?例如;

$string = "random string blah blah blah blah";

【问题讨论】:

标签: php regex freebase


【解决方案1】:

您可以使用递归正则表达式:

$result = preg_replace('/\(([^()]*+|(?R))*\)\s*/', '', $subject);

解释:

\(       # Match (
(        # Match the following group:
 [^()]*+ # Either any number of non-parentheses (possessive match)
|        # or
 (?R)    # a (recursive) match of the current regex
)*       # Repeat as needed
\)       # Match )
\s*      # Match optional trailing whitespace

【讨论】:

  • 这是一个很好的答案!需要注意的一件事是,您的最终结果中会有几个您可能不想要的额外空格。例如,将此正则表达式用于您的测试字符串将产生random_string_blah___blah_blah__blah 而不是random_string_blah_blah_blah_blah,因此请确保在必要时删除这些额外的空格。 (用下划线替换空格,因为 cmets 中没有保留空格)。
  • @NickCoons:好点。我添加了一个空格去除器:)。提示:键入Alt + (Keypad 0 Keypad 1 Keypad 6 Keypad 0) 以创建不可破坏的空间。
  • @TimPietzcker:感谢您的提示。我的数字小键盘坏了,所以我必须从不同的系统尝试一下。
猜你喜欢
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 2012-03-16
  • 2020-11-21
相关资源
最近更新 更多