Что нового

[RegExp] Сложности в понимании шаблонов функции StringRegExp()

Nitro-N

Новичок
Сообщения
7
Репутация
0
Всем привет! Это мой 1 пост :beer: :IL_AutoIt_1:
Итак. В русском справочнике по AutoIt имеются ошибки в описании этой функции, может быть даже и в работе функции.

Задача: есть html документ, из него нужно вытащить ссылку(и) содержащие строку "ifolder"(без кавычек)

Мой вариант:
Код:
StringRegExp($document,'href="(.*?)ifolder(.*?)"',3)
но так я получаю пустой массив

Рабочий:
Код:
StringRegExp($document,'href="(.*?)"',3)
но так я получаю массив из всех ссылок в документе

Плиз помогите решить проблему :(

П.С. Вообще бы было хорошо чтобы тот, кто хорошо разбирается в SringRegExp функциях, сделал описание этой функции с примерами для каждого элемента шаблона функции. Я думаю я не один плохо понимаю их и меня поддержат.
 

amel27

Продвинутый
Сообщения
146
Репутация
55
Код:
StringRegExp($document,'(?i)href="([^"]*?ifolder[^"]*)"',3)
 

Latoid

Знающий
Сообщения
95
Репутация
11
Код:
#include <Array.au3>

$html = FileOpen ("1.html", 0)

$document = FileRead ($html)
FileClose ($html)

$array = StringRegExp ($document, '(?i)\<a\shref\=\"(.*ifolder.*)\"\>', 3)
_ArrayDisplay ($array)
 
Автор
Nitro-N

Nitro-N

Новичок
Сообщения
7
Репутация
0
amel27 сказал(а):
Код:
StringRegExp($document,'(?i)href="([^"]*?ifolder[^"]*)"',3)
Благодарю, Ваш вариант работает корректно. :ok: Можно расписать маску по порядку?


Latoid сказал(а):
Код:
#include <Array.au3>

$html = FileOpen ("1.html", 0)

$document = FileRead ($html)
FileClose ($html)

$array = StringRegExp ($document, '(?i)\<a\shref\=\"(.*ifolder.*)\"\>', 3)
_ArrayDisplay ($array)
К сожалению Ваш вариант работает некорректно :scratch:
 

SyDr

Сидра
Сообщения
651
Репутация
158
(?i)href="([^"]*?ifolder[^"]*)" - нечувствительно к регистру
(?i)href="([^"]*?ifolder[^"]*)" - символы href="
(?i)href="([^"]*?ifolder[^"]*)" - вернуть совпадение в группе
(?i)href="([^"]*?ifolder[^"]*)" - минимальное кол-во символов не ", после которых...
(?i)href="([^"]*?ifolder[^"]*)" - идёт ifolder
(?i)href="([^"]*?ifolder[^"]*)" - максимальное кол-во символов не ", после которых...
(?i)href="([^"]*?ifolder[^"]*)" - символ "
 
Автор
Nitro-N

Nitro-N

Новичок
Сообщения
7
Репутация
0
Спасибо. Можно уточнить почему и спользуется "вернуть совпадение в группе" ведь "ifolder" не повторяется в одной ссылке?
 

SyDr

Сидра
Сообщения
651
Репутация
158
Ни понял >_<
Нужно найти все ссылки на ifolder, верно? Группы используются именно для того, чтобы вернуть полученные совпадения.
 
Автор
Nitro-N

Nitro-N

Новичок
Сообщения
7
Репутация
0
Да, верно. Значит я ошибался в понимании значения скобок. Всё равно бы мануальчик по функции нормальный :(
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Nitro-N [?]
Всё равно бы мануальчик по функции нормальный
в основное своей массе все регвыры в многих языках имеют одинаковую структуру. В Autoit, к примеру использует движок от Perl - PCRE (Perl compatible Regular Expressions). Самый грамотный, на мой взгляд, мануал по регвырам это - Фридл. "Регулярные выражения" (скачать).
 
Верх