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

Если вы разрабатываете на Perl, PHP, Python, Ruby, JavaScript (или любом другом языке, поддерживающем регулярные выражения) и не знаете регулярных выражений, вы многое упускаете.

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

Регулярные выражения — мощный инструмент.
Я уверен, что вы слышали это утверждение раньше.

Но вы также слышали много негатива на stackoverflow или где-то еще.

В целом, для этого есть две основные причины:

  • Неуместное использование регулярных выражений
  • Непонимание и боязнь регулярных выражений


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

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

Например, предположим, что вы хотите подтвердить адрес электронной почты, просто проверив символ @.

Использование регулярного выражения preg_match('/@/', $Email) является избыточным.

Регулярных выражений нет. Мы просто искали символ.

В этом случае было бы более уместно использовать strpos( $email, '@').

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

Потери незначительны.

Однако если мы ищем очень большую строку вместо адреса электронной почты и делаем это несколько раз в течение цикла, это приведет к значительному повышению производительности.

Например, вам нужно найти несколько строк в исходном коде html-страницы.

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

Некоторые из них даже используют это как аргумент не изучать регулярные выражения.

Это абсолютно неправильно! Добавим к нашему примеру несколько небольших требований.

Допустим, мы хотим убедиться, что символ @ является первым символом в строке, и если это так, замените его символом #.

Возможно, по какой-то причине мы конвертируем ответы на твиты в хэш-теги.

Используя строковые функции, это может выглядеть примерно так:

  
  
  
   

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 );

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

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

Это лучший способ учиться! Перевод Теги: #regexp #регулярные выражения #регулярные выражения #php #регулярные выражения

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.