Статьи

Эпизод 2: Реальные регулярные выражения

Давайте разберемся с этим сразу: я люблю регулярные выражения. На самом деле, я знаю, что они — швейцарский армейский нож обработки текста, и ни один уважающий себя разработчик не сможет долго обходиться без них

Конечно, мы все также знаем, насколько они опасны. Как всегда, с великой силой приходит большая ответственность.

Тем не менее, если вы знаете, как — и когда — и почему — использовать регулярные выражения, они незаменимы. Так что на этой неделе регулярные выражения будут нашей темой.

Ниже приведены пять регулярных выражений. Каждый из них соответствует строке реального мира; то есть полуструктурированный фрагмент текста, который вы, возможно, захотите извлечь из большого документа. Вот пример вопроса, чтобы дать вам представление о том, что я имею в виду:

  1. [0-9]{5}

Это, конечно, почтовый индекс США.

Итак, каким «вещам» соответствуют эти регулярные выражения? Для этого теста мы предположим, что механизм регулярных выражений работает в режиме без учета регистра:

  1. [A-PR-Y0-9]{3}-[A-PR-Y0-9]{3}-[A-PR-Y0-9]{4}
  2. &(?!(w+|#d+);)
  3. (-?(?:0|[1-9]d*))(.d+)?([eE][-+]?d+)?
  4. ([da-f]{2}:){5}([da-f]{2})
  5. <[^>]*?>

Конечно, так как мы имеем дело с регулярными выражениями здесь, я был бы неправ, если бы я не дал вам две проблемы по цене одной.

В каждом случае с регулярным выражением что-то не так. Например, приведенное выше регулярное выражение для почтового индекса не соответствует формату ZIP + 4 (т.е. 66044-0034), который используется для многих адресов в наши дни.

Итак, что касается второй части, что не так с остальными?

Наслаждайтесь своей начинкой живота благодарения, и настраивайтесь в течение выходных для ответов.