Соответствие содержанию круглых скобок в PCRE без внешних паренов - PullRequest
1 голос
/ 06 августа 2009

Мне нужно извлечь содержимое несбалансированной пареновой конструкции. В руководстве для PCRE я нашел решение для подбора сбалансированных паренов.

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

Для моего теста

<[<[ab<[cd]>]><[ef]>

Извлекает

0.0: <[ab<[cd]>]>
0.1: <[ef]>

Но я хочу извлечь тот же контент без внешних скобок:

0.0: ab<[cd]>
0.1: ef

Может кто-нибудь указать решение?

1 Ответ

0 голосов
/ 06 августа 2009

Что ж, с точки зрения вашего регулярного выражения, содержимое внутри самого внешнего вложения (они не являются скобками при обычном использовании этого термина) уже захвачено в группу скобок. Я не знаю, в каком контексте вы используете библиотеку PCRE, но нужные вам извлечения должны присутствовать в «совпадении № 1» (где полное совпадение паттерна соответствует совпадению № 0). т. е. ваши данные уже должны выглядеть следующим образом:

0.0: <[ab<[cd]>]>
0.1: <[ef]>
1.0: ab<[cd]>
1.1: ef
...