2016-10-03 39 views
0

我行有像这样的:如何捕捉递归匹配括号中的内部模式正则表达式?

[something] 
[[something else]] 
[[[another text here]]] 
... 

我想捕捉的内文是somethingsomething elseanother text here

为此,我写了这个regex

m/^([^\[\]]+|\[(?1)\])$/gm 

遗憾的是它并没有捕捉到,即使我把捕获组围绕[^\[\]]+内部文本。我猜想捕获组在第一次匹配时锁定其内容,而不是在最后一次递归期间。

如何使用捕获组捕获内部文本?

+0

您使用哪种语言? – melpomene

+0

与PCRE兼容的任何语言。 – nowox

+0

有什么问题'([^ \ [\]] +)'? – melpomene

回答

2

使用PCRE无法从地面上的递归获取捕获组内容。

用于您的具体的例子解决方法是不使用递归功能,并检查是否有总是对于每个开口,支架右括号:

/\A (?:\[(?=[^]]*(]\1?+)))+ ([^][]*) \1 \z/x 

(第2组,demo

但你不能在更复杂的字符串中使用这种方式(同一级别有多个组)。