如何在递归匹配括号正则表达式中捕获内部模式?
How to capture the inner pattern in a recursive matching brackets regex?
我有这样一行:
[something]
[[something else]]
[[[another text here]]]
...
我想捕获 something
、something else
和 another text here
的内部文本。
为此我写了这个regex:
m/^([^\[\]]+|\[(?1)\])$/gm
不幸的是,即使我在 [^\[\]]+
周围放置一个捕获组,它也不会捕获内部文本。我想捕获组在第一次匹配时锁定其内容,而不是在最后一次递归期间。
如何使用捕获组捕获内部文本?
无法使用 PCRE 从底层的递归中获取捕获组内容。
针对您的特定示例的解决方法是不使用递归功能并检查每个左括号是否始终有一个右括号:
/\A (?:\[(?=[^]]*(]?+)))+ ([^][]*) \z/x
(第 2 组,demo)
但是你不能用这种方式处理更复杂的字符串(在同一级别有多个组)。
我有这样一行:
[something]
[[something else]]
[[[another text here]]]
...
我想捕获 something
、something else
和 another text here
的内部文本。
为此我写了这个regex:
m/^([^\[\]]+|\[(?1)\])$/gm
不幸的是,即使我在 [^\[\]]+
周围放置一个捕获组,它也不会捕获内部文本。我想捕获组在第一次匹配时锁定其内容,而不是在最后一次递归期间。
如何使用捕获组捕获内部文本?
无法使用 PCRE 从底层的递归中获取捕获组内容。
针对您的特定示例的解决方法是不使用递归功能并检查每个左括号是否始终有一个右括号:
/\A (?:\[(?=[^]]*(]?+)))+ ([^][]*) \z/x
(第 2 组,demo)
但是你不能用这种方式处理更复杂的字符串(在同一级别有多个组)。