2014-03-06 2 views
0

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

&nbsp;SW * <br> 

т.е. строка, начинающаяся с &nbsp;SW заканчивая <br> в QString, используя регулярные выражения с 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>]$");, не компиляцией.

Как вы поживаете?

+0

Я бы начал с учебника о регулярных выражениях. Посмотрите на некоторые примеры и как вы должны писать синтаксис. Затем попробуйте несколько строк примера с онлайн-тестером regexp и начните работу оттуда. – MatthiasB

ответ

1

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

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

точная картина была 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), который захватывает весь узор, а не содержимое скобок.