Комментарии 20
Я говорю: «уместнее», а не «более высокая производительность», потому что в этом примере, где мы работаем с крошечной строкой электронной почты.
Извините, но перевод ужасен.
Перестал читать после первого примера, видимо как автор, так и переводчик плохо знают как PHP так и регулярные выражения.
Я просто оставлю это тут.
А второй пример просто убил.
Я просто оставлю это тут.
$s[0] = $s[0]=='@' ? '#' : $s[0];
А второй пример просто убил.
Немного дополню свой комментарий, а то, как-то сердито вышло.
Итак:
Приводя перевод, автор перевода, как-бы, поддерживает точку зрения автора оригинального текста, так что я буду обращаться к обоим.
Регулярные выражения действительно очень медленные. И если Вы используете их в высоконагруженных проектах, то Вы существенно замедляете работу выполнения. Да что там говорить, даже при простом парсинге, регулярки зачастую уступают по скорости другим методам.
Только в том случае где это действительно необходимо. А при хорошем знании других подходов они становятся исключительным методом разбора строк.
Я бы не был на столько доверчивым. (регулярка для проверки адреса электронной почты)
Это что? Взорвался мозги мой, стена, стул, стол кровь текут рекой. И это не единственное место оставленно после гугл транслейта без правок.
И еще. Даже не смотря на то, то автор оригинальной статьи «is founder of Delicious Brains, a company building super awesome products for WordPress, including WP Migrate DB Pro, a huge time saving tool for WordPress developers», не стоит доверять всем и каждому в их суждениях. Особенно, когда человек пишет вот такое:
Вместо вот такого:
Итак:
Приводя перевод, автор перевода, как-бы, поддерживает точку зрения автора оригинального текста, так что я буду обращаться к обоим.
К сожалению, некоторые разработчики не поняли, что это означает, а просто решили что регулярные выражения ужасны не производительны и что они должны любой ценой избежать регулярных выражений.
Регулярные выражения действительно очень медленные. И если Вы используете их в высоконагруженных проектах, то Вы существенно замедляете работу выполнения. Да что там говорить, даже при простом парсинге, регулярки зачастую уступают по скорости другим методам.
Регулярные выражения являются мощным инструментом.
Только в том случае где это действительно необходимо. А при хорошем знании других подходов они становятся исключительным методом разбора строк.
Например, скажем, вы хотите проверить адрес электронной почты, просто проверив символ @.
Я бы не был на столько доверчивым. (регулярка для проверки адреса электронной почты)
Тогда наш строками кода становится более сложной и менее читается
Это что? Взорвался мозги мой, стена, стул, стол кровь текут рекой. И это не единственное место оставленно после гугл транслейта без правок.
И еще. Даже не смотря на то, то автор оригинальной статьи «is founder of Delicious Brains, a company building super awesome products for WordPress, including WP Migrate DB Pro, a huge time saving tool for WordPress developers», не стоит доверять всем и каждому в их суждениях. Особенно, когда человек пишет вот такое:
$length = strlen( $string );
if ( 0 === strpos( $string, '@' ) && $length - 1 === strrpos( $string, '@' ) ) {
$string = '#' . substr( $string, 1, $length - 1 ) . '#';
}
Вместо вот такого:
if ($s[0]=='@' && $s[strlen($s)-1]=='@') { $s[0]='#'; $s[strlen($s)-1]='#'; }
Вы правы, к статье я не отнесся критически, да и мой опыт этого бы не позволил. Просто в чем-то ход мыслей автора совпал с моими.
Тогда уж:
$s[0].substr($s, -1) == '@@'
:)
$s[0].substr($s, -1) == '@@'
:)
Да, так на много круче =)
Уменьшаем дальше? =)
if ($s[0].substr($s, -1) == '@@') { $s[0]=$s[strlen($s)-1]='#'; }
Уменьшаем дальше? =)
оба вы не правы:
:)
if (substr($string, 0, 1) == '@' && substr($string, -1) == '@') {
$string = '#' . substr($string, 1, strlen($string) - 2) . '#';
}
:)
какие преймущества у этого вашего перед
if ($s[0].substr($s, -1) == '@@') { $s[0]='#'; $s[strlen($s)-1]='#'; }
Например тем, что он прекрасно отформатирован.
На самом деле мой код лучше, потому что в меньшей степени не опирается на внутреннее представления данных интерпретатором.
Я на php не пишу, но тем не менее в курсе насчет mb_string и то, что мой пример тоже не будет работать с мультибайт строками, не является для меня секретом.
Но мой вариант, в случае необходимости, можно легко исправить — а ваш придется переписывать заново.
Кроме того, не будем забывать про портируемость…
На самом деле мой код лучше, потому что в меньшей степени не опирается на внутреннее представления данных интерпретатором.
Я на php не пишу, но тем не менее в курсе насчет mb_string и то, что мой пример тоже не будет работать с мультибайт строками, не является для меня секретом.
Но мой вариант, в случае необходимости, можно легко исправить — а ваш придется переписывать заново.
Кроме того, не будем забывать про портируемость…
P.S.
Но если говорить строго, код в статье лучше, так как очевидно быстрее.
С другой стороны, мой вариант немного читабельнее.
Но если говорить строго, код в статье лучше, так как очевидно быстрее.
С другой стороны, мой вариант немного читабельнее.
Полностью согдасен с обоими доводами, но тут есть одно «но».
Смотря где использовать и для чего.
Если для себя накидать на один раз, то мой вариант быстрее в плане, банально, набора текста.
Если для большого проекта который покрывается тестами, то Ваш вариант конечно лучше.
Однако в статье делается упор на то, что регулярки изящнее, и короче, поэтому я и привел этот пример исключительно в академических целях. Ни в коем случае я не настаиваю на том, что только так и надо писать.
Смотря где использовать и для чего.
Если для себя накидать на один раз, то мой вариант быстрее в плане, банально, набора текста.
Если для большого проекта который покрывается тестами, то Ваш вариант конечно лучше.
Однако в статье делается упор на то, что регулярки изящнее, и короче, поэтому я и привел этот пример исключительно в академических целях. Ни в коем случае я не настаиваю на том, что только так и надо писать.
«это более удобно для чтения тем, кто имеет власть на регулярные выражения» — you have no power over me!©regexp
— Если вы разрабатываете в Perl, PHP, Python, Ruby, JavaScript (или любом другом языке с поддержкой регулярных выражения) и не знаете регулярные выражения…
… то вы еще не программист
… то вы еще не программист
Проблема регулярных выражений в том, что их легко писать, но мучительно сложно читать.
Так что если вы используете в коде скольк-нибудь сложный регексп, обязательно сопровождайте его комментарием о том, что он делает.
Так что если вы используете в коде скольк-нибудь сложный регексп, обязательно сопровождайте его комментарием о том, что он делает.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Перестаньте избегать регулярных выражений