crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Регулярное выражение от <form...> до первого </form>
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ViGOur Дата 18.8.2008, 10:30
  Угу, заработало! Спасибо. :)
Tonal Дата 18.8.2008, 8:36
  Ага, проверил. Qt действительно не понимает конструкций +?, *? и ?? но при переключении во второй синтаксис все квантификаторы делаются "нежадными".
Т.е. работает <form[^>]+>(.+)</form> + QRegExp::RegExp2.
+ setMinimal
ViGOur Дата 14.8.2008, 12:24
  Тоже самое, сам глянь с помощью утилиты RegExp, которая находится в %qtdir%\examples\tools\regexp
Litkevich Yuriy Дата 14.8.2008, 12:18
  ViGOur, а если вместо
(.+?)
так
({.+}?)
ViGOur Дата 14.8.2008, 12:10
  Неа, не идет, вот пример:
    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 документ.

Да и тулза не съедает тоже. :(
Tonal Дата 14.8.2008, 12:01
  Там нужно 2 вариант синтаксиса включить: QRegExp::RegExp2
ViGOur Дата 14.8.2008, 8:58
  Понял, я только начинаю вникать в регулярные выражения.

Но в Qt'шной тулзе RegExp выражения (.+?) и (.*?) не работают. :(
Tonal Дата 14.8.2008, 8:06
 
Цитата(ViGOur @ 13.8.2008, 20:26) *
<form[^>]+>([^<>]*)</form>
но почему-то получаю данные до второго </form>, а не до первого.

Поставь ? после *
Это сделает повторитель "не жадным".
"Жадный" повторитель захватывает сразу всё сколько может, а потом отдаёт если остаток выражения не совпадает.
"Нежадный" наоборот, после захвата минимально возможного количества символов, отдаёт управление дальше, и если совпадений там нет, кушает следующий доступный. :)

P.S. Кстати, изменение не проканают - у тебя между тегами form стоит ([^<>]*) - т.е. взять любую последовательность символов в которой не встречаются символы <> - т.е. при встрече первого же тега (а это скорее всего будет не </form> оно остановиться. И выражение обломается.
Так что тебе нужно его заменить (как правильно написал Andrew Selivanov) на такое: (.+?)
Andrew Selivanov Дата 13.8.2008, 23:09
  На Perl-e это делается так...
$test =~ m/<form>(.+?)<\/form>/;
print "$1\n";
ViGOur Дата 13.8.2008, 16:26
  Есть HTML документ, в нем есть две формы (form). Мне нужно получить все, что внутри первого form, пишу выражение:
<form[^>]+>([^<>]*)</form>
но почему-то получаю данные до второго </form>, а не до первого.
Как нужно составить регулярное выражение, чтобы получить данные только из первой формы.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 5:01