Найти тему
Легко в’IT

Составные части регулярных выражений

В начале, как и обещал, отвечу на свой вопрос, что проверяет регулярное выражение из прошлого поста: \d{1,2}\.\d{1,2}\.\d{4}

Это регулярное выражение проверяет ДАТУ: одна или две цифры дня, то же для месяца и 4 для года. Еще я хотел дать тебе универсальный способ проверить любую дату с учетом даже количества дней в каждом из месяцев (с моего любимого сайта http://regex101.com):

(?<![0-9.])
(?P<day>
0?[1-9] | # 1-9 , 01-09
[12][0-9] | # 10-29
3[01] # 30-31
) \\.
(?(?=0?[469]|11)(?<!31\\.)|) # month of 30 day
(?(?=0?2)(?<!3[01]\\.)|) # feb not 30 31
(?(?=0?2\\.\\d\\d(?!00)(?:[02468][048]|[13579][26]))|(?<!29\\.)) # февраль високосные года и 2000 2400 2800...
(?P<month>0?[1-9]|1[12]) \\.
(?P<year>19[0-9][0-9]|20[0-9][0-9])(?!\\d)

Если захочешь, чтобы я его по пунктам разобрал - пиши, ну а я перейду к следующей теме.

Логичность повествования - это вообще моя сильная черта, поэтому после того как я показал, как в принципе пишутся регулярные выражения, лови статью про то, из чего каждое из них состоит и какие специальные символы бывают!

  1. Ну во-первых, у каждого из них есть границы, в большинстве языков есть специальный символ, который задает границы регулярного выражения: “/”, то есть каждое выражение пишется между двумя слешами: /\d{1,2}/
  2. Если мы напишем вот такое же выражение как в предыдущем пункте, то это двузначное число будет искаться в любой части строки. Но если мы хотим сказать, что строка должна состоять ТОЛЬКО из того, что указано в регулярном выражении, то нам надо добавить символы начала (^) и конца ($) строки, то есть в конечном итоге оно будет выглядеть так: /^\d{1,2}$/. Эти символы можно использовать как вместе так и по отдельности, напрмер если нам важно только чтобы что-то обязательно было в начале строки, а на остальную ее часть нам по барабану: /^\d{1,2}/
  3. И наконец третья часть: флаги. Они идут после второго слеша и говорят нашему языку программирования, как ему интерпретировать нашу писанину. Этих флагов достаточно много и все их ты найдешь в первом же ответе гугла по запросу “флаги регулярных выражений”, я отмечу только самые основные из них:
    i - Ignore Case, флаг игнорирования регистра букв, то есть большие или маленькие буквы - интерпретатору будет пофиг - загребет все, таким образом запись без флага /[a-zA-Z]/ будет идентична записи /[a-z]/
    i
    g - Global, если этот флаг не указать, то язык найдет первое совпадение и на этом успокоится, с флагом g ты получишь все совпадения из строки
    s - Single line, если у тебя текст анализируемый состоит из нескольких строчек, то этот флаг заставит интерпретатор слить все строчки в одну
    m - Multiline, очень похожее поведение на предыдущий флаг, но только никто текст под одну строчку не загоняет, а анализируются все строчки. Если его не указать, то совпадение будет искаться только в первой строке и если оно найдено не будет, то все равно поиск будет остановлен.

На сегодня, пожалуй, всё. Жди завтра новую статью, а пока подписывайся и зови друзей!