【发布时间】: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