#c #regex #qt #qregexp
#c #регулярное выражение #qt #qregexp
Вопрос:
Вот моя проблема
я использую QRegExp в библиотеке QT для захвата выражения prolog, подобного этому
ma(v, c).
с помощью этого регулярного выражения
([a-z][A-Za-z0-9]*)(\()([A-Za-z0-9]*,)*([A-Za-z0-9]*)(\))(\.)
в этом случае это дает мне
"ma" "(" "v" "," "c"" ")" "."
но когда я пробую это предложение пролога
ma(v, c, r).
это только дает мне
"ma" "(" "c" ", " "r" ")" "."
Есть ли способ захватить все кванторы?
Комментарии:
1. Лучший способ для вас — сопоставить весь текст внутри
()
с\([^()]*\)
, а затем обрезать(
и)
и разделить содержимое с помощью,
Ответ №1:
В регулярных выражениях группы определяются пользователем, а не выражением, подлежащим анализу. Я имею в виду, что количество групп не будет увеличиваться или уменьшаться в зависимости от анализируемых данных.
Когда вы вводите ([A-Za-z0-9]*,)*
, это не означает, что регулярное выражение вернет ноль или много групп, соответствующих этому шаблону [A-Za-z0-9]*,
.
Я предлагаю разделить его на три операции. Один для анализа всей структуры, другой для разделения этого v, c, r с помощью «,» и один для объединения всего:
Операция 1 — используйте это регулярное выражение: ([a-z][A-Za-z0-9]*)(\()((?:[A-Za-z0-9]*,?)*)(\))(\.)
Операция 2 — разделите строку в группе (3) с помощью ,
для получения каждого элемента.
Операция 3 — объединение: группа (1) группа(2) результат_о_операции_2 группа(4) группа(5)