【问题标题】:Regex match anything inside the fewest brackets正则表达式匹配最少括号内的任何内容
【发布时间】:2019-03-09 10:53:40
【问题描述】:

我想匹配最少括号内的任何内容,但排除其中的另一个括号。

示例 1:

字符串:

((((1)))(2)

结果:

2

示例 2:

字符串:

(((1)2)3)

结果:

3

示例 3:

字符串:

(1(2(3)))

结果:

1

我的正则表达式是:

\(((?>[^\(\)]+|(?R))*)\)

不幸的是结果不一样。

【问题讨论】:

  • 我不知道是否应该有多个级别,但是对于上面三个示例,在“外层”中总是有一个数字,就像 (^((\d)|( \d))$) 应该做的工作。
  • 如果输入是(2((1)2)3),那么预期的输出是什么?
  • 如果我上面评论的答案是3,请使用^(\((?>(\d+)|(?1))*\))+$,第2组将包含所需的号码。
  • @WiktorStribiżew 如果输入是 (2((1)2)3),那么输出将是 2 和 3。您的正则表达式可以解决我上面的 3 个条件。你可以为 (2((1)2)3) 再做一个新的吗?谢谢!
  • 我希望匹配在不同的字符串组 (2((1)2)3)

标签: php regex preg-match


【解决方案1】:

试试这个:

(?<!\({2}|\(\d\(|\))(\d)|(\d)(?:\)[^\(\)\d])

DEMO

【讨论】:

    猜你喜欢
    • 2012-01-21
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2016-02-13
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多