Как стать автором
Обновить

Перестаньте избегать регулярных выражений

Время на прочтение3 мин
Количество просмотров17K
Если вы разрабатываете в Perl, PHP, Python, Ruby, JavaScript (или любом другом языке с поддержкой регулярных выражения) и не знаете регулярные выражения, вы упускаете очень многое. И если вы намеренно избегаете регулярные выражения, это как вырванные страницы из вашего руководства, хотя остальные части его на месте.
Регулярные выражения являются мощным инструментом.
Я уверен, вы слышали это заявление раньше. Но вы также слышали много негатива в адрес на stackoverflow или еще где-то. Вообще на это есть две основные причины:
  • Нецелевое использование регулярных выражений
  • Непонимание и страх регулярных выражений
Пожалуй, наиболее распространенным примером нецелевого использования регулярного выражения является проверка адреса электронной почты. Например, скажем, вы хотите проверить адрес электронной почты, просто проверив символ @. Использование регулярных выражений preg_match ('/ @ /', $ E-mail) является избыточным. Там нет регулярных выражений. Мы просто искали символ. В данном случае уместнее было бы использовать strpos( $email, '@' )Я говорю: «уместнее», а не «более высокая производительность», потому что в этом примере, где мы работаем с крошечной строкой электронной почты. Потери незначительны. Однако, если мы ищем очень большой строку вместо адреса электронной почты и делаем это несколько раз в течение цикла, это приведет к значительному улучшению производительности. Например, необходимо найти несколько строк в исходниках html страницы.Если ведется поиск какой-то постоянной строки — не используйте регулярные выражения!К сожалению, некоторые разработчики не поняли, что это означает, а просто решили что регулярные выражения ужасны не производительны и что они должны любой ценой избежать регулярных выражений. Некоторые из них даже используют это в довода не изучать регулярные выражения. Это абсолютно неправильно!Давайте добавим несколько небольших требованиях к нашему примеру. Скажем, мы хотим убедиться, что символ @ является первым символом в строке и если это так, замените его символом #. Может быть, мы преобразовываемTweet ответы в хэш-теги по некоторым причинам. С применением строковых функций это может выглядеть примерно так:
if ( 0 === strpos( $string, '@' ) ) {
    $string = '#' . substr( $string, 1 );
}
Но с помощью регулярных выражений этого же можно добиться более кратко:
$string = preg_replace( '/^@/', '#', $string );
Если вы еще не знаете регулярные выражения, вам, вероятно, это может показаться менее читаемым, но стоит понимать, что это более удобно для чтения тем, кто имеет власть на регулярные выражения.Если к нашему примеру добавить еще одно требование: последний символ также должен быть @, и только тогда мы станем заменять оба символа @ на #. Тогда строковые функции еще более усложняют наш код, и делают его менее читаемым:
$length = strlen( $string );
if ( 0 === strpos( $string, '@' ) && $length - 1 === strrpos( $string, '@' ) ) {
    $string = '#' . substr( $string, 1, $length - 1 ) . '#';
}
Наше регулярное выражение же изменяется незначительно:
$string = preg_replace( '/^@(.*)@$/', '#$1#', $string );
Эти тривиальные примеры, но, надеюсь, они показывают, как код становится всё более сложным, если вы настаиваете на использование строковых функций вместо того, чтобы ответить на вызов написания регулярных выражений.Так что в следующий раз, когда вы окажетесь перед выбором способа избежать регулярных выражений, просто поищите решения, узнайте, как это можно сделать при помощи регулярных выражений, настраивайте его, играйте с ним, боритесь с ним, и повторяйте. Это лучший способ учиться!Перевод
Теги:
Хабы:
Всего голосов 64: ↑20 и ↓44-24
Комментарии20

Публикации

Истории

Работа

PHP программист
115 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
11 сентября
Митап по BigData от Честного ЗНАКа
Санкт-ПетербургОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн