Есть HTML документ, в нем есть две формы (form). Мне нужно получить все, что внутри первого form, пишу выражение:
<form[^>]+>([^<>]*)</form>
но почему-то получаю данные до второго </form>, а не до первого.На Perl-e это делается так...
$test =~ m/<form>(.+?)<\/form>/;
print "$1\n";
<form[^>]+>([^<>]*)</form>
но почему-то получаю данные до второго </form>, а не до первого.Понял, я только начинаю вникать в регулярные выражения.
Но в Qt'шной тулзе RegExp выражения (.+?) и (.*?) не работают.
Там нужно 2 вариант синтаксиса включить: QRegExp::RegExp2
Неа, не идет, вот пример:
QString szBody = "<form[^>]+>(.+?)</form>";
// ...
QString sz;
QRegExp rx( szBody, Qt::CaseInsensitive, QRegExp::RegExp2);
int pos = rx.indexIn( szData);
if (pos > -1)
{
sz = rx.cap( 1);
}
В szData прочитанный HTML документ.ViGOur, а если вместо
(.+?)
так
({.+}?)
Тоже самое, сам глянь с помощью утилиты RegExp, которая находится в %qtdir%\examples\tools\regexp
Ага, проверил. Qt действительно не понимает конструкций +?, *? и ?? но при переключении во второй синтаксис все квантификаторы делаются "нежадными".
Т.е. работает <form[^>]+>(.+)</form> + QRegExp::RegExp2.
+ setMinimal
Угу, заработало! Спасибо.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)