![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
ViGOur |
![]()
Сообщение
#1
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Есть HTML документ, в нем есть две формы (form). Мне нужно получить все, что внутри первого form, пишу выражение:
но почему-то получаю данные до второго </form>, а не до первого.Как нужно составить регулярное выражение, чтобы получить данные только из первой формы. |
|
|
Andrew Selivanov |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
На Perl-e это делается так...
|
|
|
Tonal |
![]()
Сообщение
#3
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
но почему-то получаю данные до второго </form>, а не до первого.Поставь ? после * Это сделает повторитель "не жадным". "Жадный" повторитель захватывает сразу всё сколько может, а потом отдаёт если остаток выражения не совпадает. "Нежадный" наоборот, после захвата минимально возможного количества символов, отдаёт управление дальше, и если совпадений там нет, кушает следующий доступный. ![]() P.S. Кстати, изменение не проканают - у тебя между тегами form стоит ([^<>]*) - т.е. взять любую последовательность символов в которой не встречаются символы <> - т.е. при встрече первого же тега (а это скорее всего будет не </form> оно остановиться. И выражение обломается. Так что тебе нужно его заменить (как правильно написал Andrew Selivanov) на такое: (.+?) Сообщение отредактировал Tonal - 14.8.2008, 8:17 |
|
|
ViGOur |
![]()
Сообщение
#4
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Понял, я только начинаю вникать в регулярные выражения.
Но в Qt'шной тулзе RegExp выражения (.+?) и (.*?) не работают. ![]() |
|
|
Tonal |
![]()
Сообщение
#5
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Там нужно 2 вариант синтаксиса включить: QRegExp::RegExp2
|
|
|
ViGOur |
![]()
Сообщение
#6
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Неа, не идет, вот пример:
В szData прочитанный HTML документ.Да и тулза не съедает тоже. ![]() Сообщение отредактировал ViGOur - 14.8.2008, 12:10 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
ViGOur, а если вместо
(.+?) так ({.+}?) |
|
|
ViGOur |
![]()
Сообщение
#8
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Тоже самое, сам глянь с помощью утилиты RegExp, которая находится в %qtdir%\examples\tools\regexp
|
|
|
Tonal |
![]()
Сообщение
#9
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Ага, проверил. Qt действительно не понимает конструкций +?, *? и ?? но при переключении во второй синтаксис все квантификаторы делаются "нежадными".
Т.е. работает <form[^>]+>(.+)</form> + QRegExp::RegExp2. + setMinimal Сообщение отредактировал Tonal - 18.8.2008, 8:41 |
|
|
ViGOur |
![]()
Сообщение
#10
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Угу, заработало! Спасибо.
![]() |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 1:07 |