Если вы разрабатываете на 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 #регулярные выражения
-
История Банковского Банка
19 Oct, 24 -
Мок - Это Не Костыль, Мок - Это Спецификация
19 Oct, 24 -
Проверьте Свой Цветовой Iq
19 Oct, 24