Regex с Qt захватывает некоторый текст
Я хотел бы зафиксировать второй вхождение текста, замененного звездочкой в следующей строке:
SW * <br>
то есть строка, начинающаяся с SW
заканчивая <br>
в QString, используя RegEx с Qt.
пример здесь: строка
SW = min(1, max(0, pow(10, -0.2 - 6.5 ) ** (1.0 / 0.2)))<br>
и ожидаемый результат
= min(1, max(0, pow(10, -0.2 - 6.5 ) ** (1.0 / 0.2)))
Пока у меня есть QRegExp rx("^[\ SW](.*)[<br>]$");
который не компилируется.
Как бы вы сделали?
2 ответа
Вероятно, проблема с компиляцией связана с попыткой избежать амперсанда (\&
). Но, кроме этого, ваше регулярное выражение в основном верно, просто чрезмерное использование групп символов ([]
), они не для группировки. Это выражение работает в моих тестах: SW(.*)<br>
так что в вашем случае вы бы сделали что-то вроде
QRegExp rx(" SW(.*)<br>")
Точная картина была QLatin1String(".* SW([^<]*)<br>.*")
и для захвата этот код работал для меня
QRegExp rx(QLatin1String(".* SW([^<]*)<br>.*"));
int p = 0;
QString cap ;
if((p = rx.indexIn(str, p)) != -1)
cap = rx.cap(1).trimmed();
nota bene: должен захватывать первое вхождение для элемента в скобках с cap(1)
и не cap(0)
который захватывает весь образец, а не содержание круглых скобок.