Regex с Qt захватывает некоторый текст

Я хотел бы зафиксировать второй вхождение текста, замененного звездочкой в ​​следующей строке:

&nbsp;SW * <br>

то есть строка, начинающаяся с &nbsp;SW заканчивая <br> в QString, используя RegEx с Qt.

пример здесь: строка

&nbsp;&nbsp;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("^[\&nbsp;SW](.*)[<br>]$"); который не компилируется.

Как бы вы сделали?

2 ответа

Решение

Вероятно, проблема с компиляцией связана с попыткой избежать амперсанда (\&). Но, кроме этого, ваше регулярное выражение в основном верно, просто чрезмерное использование групп символов ([]), они не для группировки. Это выражение работает в моих тестах: &nbsp;SW(.*)<br>так что в вашем случае вы бы сделали что-то вроде

QRegExp rx("&nbsp;SW(.*)<br>")

Точная картина была QLatin1String(".*&nbsp;SW([^<]*)<br>.*") и для захвата этот код работал для меня

       QRegExp rx(QLatin1String(".*&nbsp;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) который захватывает весь образец, а не содержание круглых скобок.

Другие вопросы по тегам