Что нового

Регулярные выражения - освоение

aranea

Новичок
Сообщения
27
Репутация
4
Подскажите в autoit свой синтаксис регулярных выражений? если нет то где можно найти русскую справку по теме, английская не дается вообще мне для понимания :wacko:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
ну, свой не свой, но есть - PCRE.
именно касаемо рег. выражений, более менее на русском распедалено в провославной русской справке от г-на Иванова. Взять можно тут - AutoIt Russian Documentation v3.2.5.4
Сама функция компиляции выражения
Код:
StringRegExp()
 

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Что-то я никак не пойму, может кто объяснит текст из примера:

Код:
;Option 3, global return, old AutoIt style
$array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 3)

for $i = 0 to UBound($array) - 1
    msgbox(0, "RegExp Test with Option 3 - " & $i, $array[$i])
Next

Если я правильно понял, конструкция (.*?) представляет из себя "любой символ". Именно эта конструкция и попадает в массив? Судя по помощи, эта конструкция означает: повторять кучу раз любой символ, пока не встретится конструкция </(?i)test>'. А если там символы переноса строки Их надо как-то обозначать?

Вообщем мне надо получить все символы между двумя фрагментами.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
Чтобы перенос строки попадал под значение "любой символ"(точка), нужно вначале регэкспа ствить (?s)
Код:
StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '(?s)<(?i)test>(.*?)</(?i)test>', 3)

Ключ (?i) также можно использовать единожды
Код:
StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '(?s)(?i)<test>(.*?)</test>', 3)
 

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Помогло.. Где-нибудь вообще в пространстве есть НОРМАЛЬНАЯ документация по регулярным выражениям, желательно с примерами?
Постоянно в поиске выскакивает вот это:
http://www.pcre.ru/docs/
Ну там нифига не работе, естественно. Вот что они написали про текст между тэгами

Код:
# Пример в Php
$text = '<item>Какой-то текст</item>';
$data = array();
preg_match('|<item>(.*)</item>|Uis', $text, $out);
# $out[1] будет сожержать строку 'Какой-то текст'
http://www.pcre.ru/examples/tags/text/22/

Ужос!!! :shok:
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
Vlasssov [?]
Где-нибудь вообще в пространстве есть НОРМАЛЬНАЯ документация по регулярным выражениям
Лично я смотрел немного здесь
Ссылка из хелпа http://www.autoitscript.com/autoit3/pcrepattern.html
Здесь глянь ссылки и книгу(книга вещь!, но много букв :D) http://autoit-script.ru/index.php/topic,37.0.html
 

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Спасибо. Еще один вопрос. Из текста между двумя известными фрагментами, надо изъять только цифры. Цифр разно количество.
Что-то типа:
$array = StringRegExp('<test>a111</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 3)

Вот нужно 111 получить. Как это сделать?
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
Код:
$array = StringRegExp('<test>a111</test> <test>b</test> <test>c</Test>', '<(?i)test>(\d*?)</(?i)test>', 3)
 

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
dwerf сказал(а):
Код:
$array = StringRegExp('<test>a111</test> <test>b</test> <test>c</Test>', '<(?i)test>(\d*?)</(?i)test>', 3)
Не работает, что-то, пробовал я так. Вот что сделал
Код:
$pat = '(?is)<test>(.*?)</test>'
$array = StringRegExp('<test>a111</test>',$pat, 3)
$s = StringRegExpReplace($array[0],'\D',"")
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
Код:
$array = StringRegExp('<test>a111</test> <test>2b</test> <test>c1</Test>', '(?i)<test>.*?(\d+).*?</test>', 3)
 
Верх