В QRegularExpression то, что является оптимальным способом обойти «утверждение с задним числом», не является фиксированной длиной ». ограничение?

Возьмите следующее регулярное выражение:

(?<=(&lt;|<)ref)

Это не удастся QRegularExpression::isValid(); а также QRegularExpression::errorString(); будет выводить

утверждение за задним числом не фиксированной длины

Теперь, очевидно, не все движки регулярных выражений имеют это ограничение, но, по-видимому, это имеет

Возможно, есть Regex ориентированный обходной путь для этого? И если нет, какова оптимальная и самая чистая стратегия для достижения этой функциональности с помощью инфраструктуры Qt?

0

Решение

Так как вы используете движок PCRE, длина шаблона внутри lookhehind не является фиксированной. Альтернативы могут быть разной длины, НО не может иметь вложенных групп альтернатив, даже если их длина также известна (фиксирована).

Таким образом, ваш (?<=(&lt;|<)ref) можно записать как (?<=&lt;ref|<ref), Однако более гибкое решение здесь будет использовать \K: (?:&lt;|<)ref\K, Здесь, группа захвата девяти будет соответствовать &lt; или же < а затем после сопоставления ref весь сопоставленный текст будет очищен.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]