Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Regular Expressions


Автор: Christoph 26.10.2008, 17:24
Вопрос по регуляркам, читал статью на винграде по Regular Expressions, написано

Код

Составные части регулярных выражений
Символы.
Cимвольные классы (перечни символов + метасимволы - границы слов).
Фиксирующие директивы (метасимволы - разделители строк).
Квантификаторы (метасимволы - повторения).
Альтернативы (метасимволы - варианты).
Группировки (метасимволы - подвыражения).
Модификаторы.


Обязательно ли должно Regular Expressions, содержать вот это все?
например -?\d+ . Где понять где какая часть и что там?

Автор: kemiisto 26.10.2008, 19:58
Цитата(Christoph @  26.10.2008,  16:24 Найти цитируемый пост)
Обязательно ли должно Regular Expressions, содержать вот это все?

Нет, конечно. Только то, что нужно в конкретном случае.

Цитата(Christoph @  26.10.2008,  16:24 Найти цитируемый пост)
например -?\d+ . Где понять где какая часть и что там? 

Признаться, не очень понял вопрос...

Автор: Christoph 26.10.2008, 21:25
-?\d+  Это регулярное выражение. не понимаю как оно сформировалась :( и что там означает каждая часть, там минус там плюс...хоть убейте не понимаю

Автор: kemiisto 26.10.2008, 22:31
В регулярном выражении 
Код

-?\d+
 присутствуют:
  • символ (-);
  • символьный класс в короткой записи (он очень популярен, посему для него существует короткая запись) (\d);
  • два квантификатора в короткой записи (опять же по причинам широкой распространённости) (? и +).
Означает такой шаблон следуещее: символ - (который может отсутствовать), за которым следует любое кол-во цифр. Т.е. фактически это шаблон положительного или отрицательного целого числа.

Автор: Christoph 26.10.2008, 23:20
Немного понял, спасибо тебе kemiisto, тему не закрываю, буду сидеть еще разбирать, по мере накопления вопросов буду писать

Автор: Christoph 27.10.2008, 15:32
Вот не понял еще чего, порядок записи Regular Expression. тот же пример 
Код

-?\d+


идем символ потом, квантификатор,символьный класс, и опять квантификатор, можно ли бы написать так?

Код

-?+\d

Автор: kemiisto 27.10.2008, 16:21
Christoph, порядок тут очень важен. Квантификаторы существует не сами по себе, они следуют за символом (символьным классом и т.п.) и 
Цитата(kemiisto @  24.5.2008,  22:11 Найти цитируемый пост)
Показывают, сколько раз может повторяться предыдущий символ (символьный класс, альтернатива и т.д.)


Код

-?\d+

Сначала идёт символ '-', который может повторяться 0 или 1 раз, затем - любая цифра, которая может повторяться 1 или более раз. Вот. smile 

Автор: APXEOLOG 27.10.2008, 16:51
А вот если мне надо сделать регулярку для url(*.png), как мне записать это? Я пишу url\(+\.png\)  это будет верным?

Автор: Christoph 27.10.2008, 18:35
я не знаю...но попробую предположить что так
Код

.png+\D+



Автор: Christoph 27.10.2008, 19:06
Я все таки не могу вкурить как составить регулируемое выражение? можете кинуть пару заданий хочу потренироваться

Автор: Matematik 27.10.2008, 19:37
Возьми программку http://regexpstudio.com/RegExpStudio.html (http://narod.ru/disk/3433914000/TestRExp.7z.html)
Все очень наглядно.
Тестируй на простых примерах 
http://forum.vingrad.ru/articles/topic-213075.html
http://ipicture.ru/

тут учебник с примерами на англ. яз. http://www.regular-expressions.info/ (см. Examples и Tutorial)
http://www.regular-expressions.info/regexbuddy.html - еще хорошая программа для работы с регулярками со множеством примеров и возможностей, платная.

Автор: Christoph 4.11.2008, 23:53
Все равно не могу понять по какому принципу построить рег. выражение, ну как .....например нужна получить строчку между точками, как это записать?

Автор: kemiisto 5.11.2008, 00:43
Цитата(Christoph @  4.11.2008,  21:53 Найти цитируемый пост)
строчку между точками, как это записать?

Код

\..+\.

или так
Код

\..+?\.

Первый вариант находит максимально длинную строчку, заключённую между двумя точками, второй - первое же вхождение. Различие в жадном и нежадном квантификаторах (+ и +?). Понятно?

Тут, вроде, всё просто. Разберём первое выражение:
\..+\.
\. - символ точки. Почему с \? Потому что просто . означает любой символ. В таком случае используем приём, который называется защита метасимвола (аналог escape-последовательностей, например, \t - табуляция). + - квантификатор.

P.S. Надо, кстати, добавить про защиту метасимволов в статью...

Автор: Christoph 5.11.2008, 23:16
Кемисто ты меня убей я нифига не понял smile у тебя есть аська?

Добавлено через 6 минут и 38 секунд
А так нельзя? 
Код

\..+


просто понять не могу в каком порядке это все ставить

Автор: Christoph 6.11.2008, 16:49
Порядок записи рег выражения есть или нет? а то я вижу записывают как хотят...

Автор: Poseidon 9.11.2008, 03:07
Цитата(Christoph @  6.11.2008,  16:49 Найти цитируемый пост)
Порядок записи рег выражения есть или нет? а то я вижу записывают как хотят... 
Вот ты писал в начале что статья читал, а задаешь такие вопросы, что становится понятно что нифига ты не читал. Попробуй не просто почитать, а еще и вникнуть, попробовать при помощи TestRExp разные варианты. А то создается спечатление что хочешь разобраться, но при этом нихочешь ничего делать.

http://regexpstudio.com/RU/TRegExpr/Help/RegExp_Syntax.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)