Что нового

Обсуждение уроков по работе с Регулярными Выражениями (RegExp)

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Redline
Хорошее дело начал.

Есть примечания...
* «Ведение» это когда что то предвидится (“у меня было ведение”), а нужно видимо «Введение» :smile:
* Скобки лучше открывай после пробела, а то выглядит не очень (вот так).

[?]
Важное замечание: при работе с обратными ссылками сразу после ссылки нельзя ставить цифры!
Я как то случайно нашёл недокументированную фичу в RegExp AutoIt'а (точнее подглядел её у Perl'а), которая как раз позволяет использовать цифры после обратных ссылок (странно оно правда по русский звучит :smile:), после открытия тикета на эту тему, эту фичу документировали:

Remarks

To separate back-references from actual (replaced) numbers, wrap it with half-round brackets, i.e: "${1}5".

А это значит, что отделять обратные ссылки от цифр можно, используя полукруглые скобки:
Код:
StringRegExpReplace($Test, ".*(\d+)", "${1}1")


P.S
Вывод:
Почаще заглядывать в справку, и смотреть на шаблоны в других ЯП.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
CreatoR
Спасибо за ценные замечания! Исправлю.
Про ссылки сам долго искал в архиве oszone.net и нашел только такие решения, а в справке не заметил даже, т.к. чаще пользуюсь русской :-[.
В таком случае обходные решения оставлю для истории.
Bloodrinker
Это только первый пилотный урок!
В выходные скорее всего продолжу ;)
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Метасимволы
"^" - совпадает с началом строки (для мультистрокового текста совпадает с началом каждой строки, но для этого необходимо включить спец флаг "(?m)", его рассмотрим позже)
Пример выводит строки из мультистрокового текста, начинающиеся с буквы "j":
Шаблон выводит только 1-е 3-х буквенные начинающиеся на j... :smile:


P.S. Экзамен будет? :smile:))
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
zlo-kazan [?]
Шаблон выводит только 1-е 3-х буквенные начинающиеся на j... :smile:P.S. Экзамен будет? :smile:))
Поправил.
Оказалось трудно придумывать вразумительные примеры :wacko:
На счет экзамена можно будет составить шаблоны посложнее для самостоятельного изучения :D
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Redline [?]
"\s" - символ пробела, совпадающий с: обычным пробелом, горизонтальная табуляция, вертикальная табуляция, началом строки, возвратом каретки или началом новой страницы "( \r\n\v\t\f)"
Вертикальная табуляция? это вообще то горизонтальный/вертикальный пробел, табуляция может быть только горизонтальной :smile: (в справке видимо опечатка на эту тему). Кстати следует в скобки добавить и "\h" (горизонт. пробел).

"\w" - символ буквы "слова", соответствует "(a-zA-Zа-яА-Я0-9_)"
"а-я" никак не попадает под этот шаблон, проверяй всё на деле, а также внимательнее читай справку, там написано:
Match any "word" character: a-z, A-Z, 0-9 or underscore (_).

"{a}" - повторить предыдущий символ (группу) ровно "a" раз. "\d{5}" соответствует пятикратному повтору цифрового символа (12345 55555 00000).
Мне кажется лучше придерживаться справке, там используется x,y, так будет понятнее.

P.S
Когда уроки закончатся, дай мне знать, я отделю всё в отдельную закрытую тему (чтобы в ней были только уроки), а в этой останется только обсуждение.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
CreatoR
Именно вертикальная табуляция (ну может у нее есть другое название "вертикальный пробел" :wacko:smile:.
С этими типографскими терминами черт ногу сломит:
http://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B
Код:
0B 	LINE TABULATION (vertical tabulation) 	вертикальная табуляция 	^K 	\v 	Перемещает позицию печати к следующей позиции вертикальной табуляции. На терминалах этот символ обычно эквивалентен переводу строки.
Это оставлю как есть, остальное подправлю.

Кстати по поводу "\w" меня вот это с толку сбило:
http://autoit-script.ru/index.php?topic=1705.msg12225#msg12225

AZJIO
Спасибо. Все таки попытаюсь сделать для форума эксклюзивные и простые примеры, а заодно помучаю свой засохший мозг :smile:
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
:laugh: Я первый кто дочитал до конца!!! :king:
Вконце пример без тега [autoit[/autoit]
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
А сделайте ссылки в первом посте на все уроки выложенные в этой теме :smile:.
В идеале убрать урок из первого поста и вынести в любое другое сообщение темы, в первом посте указать ссылки на все выложенные уроки (этакое содержание), и краткие комментарии или какую-то другую информацию не касающуюся какого-то конкретного урока и закрепить первое сообщение шапкой темы, ну а при развитии темы закрепить ее в разделе :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Redline [?]
по поводу "\w" меня вот это с толку сбило
Да, там другое имелось в виду (что для русских букв нужно указывать «а-я», кстати про «ё» я и не знал).

zlo-kazan [?]
Я первый кто дочитал до конца
А середину видимо не читал...

Вконце пример без тега
В середине тоже (там где «"\B" - не граница слова.»).

:smile:

Belfigor [?]
сделайте ссылки в первом посте на все уроки выложенные в этой теме
Лишняя работа (пока), я же написал:

[?]
Когда уроки закончатся, дай мне знать, я отделю всё в отдельную закрытую тему
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Добавил недостающие тэги.
В раздел метасимволы/"[ ]"
внес отдельный блок по букве "ё" при работе с диапазонами, где привел своё мини-исследование :graduated:

Позже напишу два небольших урока уложился в один. А дальше будут практические уроки :reading_book: по выбору инструмента RegExp для конкретной задачи, анализу обрабатываемого текста, выявлению ключевых мест в тексте и непосредственно по составлению шаблонов.

Добавил описание для "\E" и "\Q"
 

axlwor

Скриптер
Сообщения
657
Репутация
147
А можно в первом посте поставить ссылки на другие уроки? А то я долго считал, что урок один :'(
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Redline
Это (?=(?:[^\s]+=|$))
можно записать так
(?=[^\s]+=|$)
так как (?: означает группу не входящую в поиск, но и (?= также не входит в поиск. И результат одинаковый.
Кстати при использовании многострочного текста и (?m) нужно учитывать, что возврат каретки перед $ может попасть в захват, то есть (?m)^(.*)$ захватывает текст и символ @CR (\r)
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
axlwor
Будет еще один небольшой урок и уже после этого все уроки перекочуют в отдельную тему без комментариев и думаю там можно будет обойтись без ссылок ;)
AZJIO
Спасибо за замечания.

Всем вопрос:
можно ли в предпоследний пример в последнем уроке решить задачу одним выражением? У меня есть мысль - сделать обратную ссылку на вертикальную табуляцию (или ее отсутствие) и потом вставлять ее перед запятой :wacko:, но реализовать не удалось.
Тому кто сможет решить - медаль :sorcerer:
 

focus

Осваивающий
Сообщения
69
Репутация
20
Дополню данную "КОПИЛКУ !!" небольшёй поправкой. Пример1 способ 3.Да, в таком виде - проблема в кодировке. Попробовал так
Код:
$sUrl = 'http://www.gismeteo.ru/city/daily/5002/'
$sHTML = BinaryToString(InetRead($sUrl), 4)
ConsoleWrite($sHTML & @CRLF)

Стало правильно (по русски) показывать. P.S. Увидел здесь http://autoit-script.ru/index.php?topic=5527.msg39557#msg39557
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
очень странный топик, никогда с первого раза не грузит всю страницу. надо как минимум 1 раз обновлять, а то и больше
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
С этого момента эта тема только для обсуждений уроков, сами уроки переехали сюда.
 
Верх