Возьмите следующее регулярное выражение:
(?<=(<|<)ref)
Это не удастся QRegularExpression::isValid();
а также QRegularExpression::errorString();
будет выводить
утверждение за задним числом не фиксированной длины
Теперь, очевидно, не все движки регулярных выражений имеют это ограничение, но, по-видимому, это имеет
Возможно, есть Regex ориентированный обходной путь для этого? И если нет, какова оптимальная и самая чистая стратегия для достижения этой функциональности с помощью инфраструктуры Qt?
Так как вы используете движок PCRE, длина шаблона внутри lookhehind не является фиксированной. Альтернативы могут быть разной длины, НО не может иметь вложенных групп альтернатив, даже если их длина также известна (фиксирована).
Таким образом, ваш (?<=(<|<)ref)
можно записать как (?<=<ref|<ref)
, Однако более гибкое решение здесь будет использовать \K
: (?:<|<)ref\K
, Здесь, группа захвата девяти будет соответствовать <
или же <
а затем после сопоставления ref
весь сопоставленный текст будет очищен.
Других решений пока нет …