Обратные ссылки в кванторе регулярных выражений - PullRequest
1 голос
/ 25 марта 2009

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

Пример:

fillerfillerCA20 abcdefghijklmnopqrst CA5 zyxwvfillerfiller

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 25 марта 2009

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

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

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

0 голосов
/ 25 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...