2009-03-25 4 views
1

У меня есть строка, содержащая заголовок с длиной следующего поля.Backreference in Regular Expression Quantifier

Пример:

fillerfillerCA20 abcdefghijklmnopqrst CA5 zyxwvfillerfiller 

Мне нужно найти два значения: АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧША и zyxwv

Я собирался использовать обратную ссылку, чтобы получить длину для квантора:

(?i)ca(?<length>\d+?)\x20.{\k<length>}\x20? 

, но, по-видимому, использование обратной ссылки в квантере не поддерживается.

Как это сделать?

+0

OBTW: Нет необходимости использовать \ x20 для «пробела». Просто используйте символ пробела. – Tomalak

+0

Это значит, что у вас включена опция «x», правильно? В этом примере у меня нет этого. –

ответ

3

Не в одном шаге. Регулярные выражения не могут быть самореферентными. Они сначала построены, а затем используются. После создания регулярного выражения невозможно повторное построение/расширение.

Вы можете сопоставить информацию о длине, как вы это делали, и использовать ее на втором шаге при оценке совпадений.

Превентивный комментарий: Я знаю, что можно сделать "(.)\1", чтобы совместить один и тот же символ дважды. Это не то, что я имею в виду под «самореференциальным».

0

Лучше постройте парсер: просмотрите позиции CA, прочитайте следующие цифры цифр, а затем прочитайте следующие цифры x, как описано в значении цифры.