Этим утром я передал правила нашего регулярного сеанса «Разговор с экспертами» Фернандо, который отлично справился с управлением чатом, тема которого — «Регулярные выражения». Нашими экспертами сегодня были сотрудники форума SitePoint Том Паркин и Аллан Х, которые проделали потрясающую работу по объяснению концепции, которую большинство программистов считают довольно примитивной.
Вот список ресурсов, которые вышли из сессии:
Что такое регулярное выражение?
Как создать RegEx
Синтаксис и параметры
И если вам нравятся головоломки … вы можете или не можете любить эти …
Кроссворд RegEx
И еще один кроссворд
И еще один
Если вы пропустили сессию сегодня, потому что не знали об этом, убедитесь, что вы подписались на напоминания о будущих сессиях здесь .
И без лишних слов — стенограмма сессии:
[23:00] <nandotinoco> Добро пожаловать в тех людей, которые только что присоединились. Том Паркин (@ParkinT) — наш эксперт сегодня. Он является сотрудником форумов SitePoint и здесь, чтобы поговорить о регулярных выражениях
[23:01] <ParkinT> AllanH также является сотрудником форумов Sitepoint и сегодня будет экспертом.
[23:02] <ParkinT> Эта тема слишком БОЛЬШАЯ для одного человека.
[23:03] <johnlacey> Где бы вы порекомендовали законченного новичка, у которого нет опыта работы с регулярными выражениями? лол
[23:03] <AllanH> Существуют разные «ароматы» регулярных выражений. мы хотели бы обсудить Perl-совместимые регулярные выражения
[23:03] <ParkinT> Регулярные выражения универсальны среди большинства языков программирования. Однако реализация зависит от языка
[23:03] <ParkinT> Мы бы хотели, чтобы обсуждение было очень широким и общим.
[23:04] <ParkinT> Точно, Аллан.
[23:04] <AllanH> Переписать мод Apache, PHP, Javascript и, конечно, Perl используют PCRE.
[23:04] <ParkinT> Цель и задача RegEx — анализировать, сопоставлять, находить и заменять символы и строки.
[23:04] <adams> почему я должен изучать регулярные выражения в программировании?
[23:05] <ParkinT> Отличный вопрос.
[23:05] <ParkinT> На самом деле, вам НЕ ТРЕБУЕТСЯ изучать RegEX
[23:05] <ParkinT> Вы не обязаны изучать операторы IF или Switch.
[23:05] <Jerry> Насколько близко GAWK RE к PCRE?
[23:05] <ParkinT> Это просто еще один инструмент, который может (часто) помочь вам.
[23:05] <AllanH> Есть хорошие строковые функции, но иногда они недостаточно мощные
[23:05] <johnlacey> Это действительно о распознавании образов, не так ли? Я видел регулярные выражения для проверки того, что адреса электронной почты соответствуют ожидаемому формату, а также в перенаправлениях .htaccess…
[23:06] <ParkinT> Это верно.
[23:06] <AllanH> И не всегда так просто
[23:06] <AllanH> Я видел некоторых, которые получают то, что они хотят, и счастливы
[23:07] <ParkinT> Я не уверен, насколько близка реализация GAWK к PCRE.
[23:07] <AllanH> … пока они тоже не получат то, что они хотят НЕ получить
[23:07] <Джерри> Так верно, Аллан
[23:08] <johnlacey> Итак, не могли бы вы привести пример (простого) регулярного выражения?
[23:08] <ParkinT> Что можно сказать обо всем программном коде, а?
[23:08] <Jerry> В большинстве случаев легче понять проблему, когда вы получаете слишком много, чем когда вы ничего не получаете
[23:08] <ParkinT> Джон Лейси задал отличный вопрос …
[23:08] <AllanH> Достаточно верно, я думаю, что регулярное выражение — это отчасти наука, а отчасти искусство
[23:09] <ParkinT> Проверка электронной почты — это «классический» вариант использования RegEx, но я не думаю, что это очень хороший пример.
[23:09] <AllanH> Я начал с документации по PHP
[23:09] <johnlacey> Поскольку адрес электронной почты может соответствовать установленному формату, но все еще не существует?
[23:10] <AllanH> Прочитайте это и все еще часто обращайтесь к нему
[23:10] <ParkinT> Парсинг данных для определения, например, всех цифр ПОСЛЕ десятичной точки может быть примером «простого» регулярного выражения. Аллан, ты согласен?
[23:10] <AllanH> Да, и кое-что, что может появиться
[23:11] <ParkinT> Предположим, у меня есть эта строка:
[23:11] <ParkinT> 3.14159
[23:11] <ParkinT> Используя RegEx, вы ищите шаблоны, как упоминал Джонласи.
[23:11] <ParkinT> Аллан, поправь меня там, где я что-то неправильно формулирую …
[23:12] <ParkinT> Десятичная точка становится «якорем» в нашей оценке. Мы хотим посмотреть, что будет после этого.
[23:12] <AllanH> и не можешь или не хочешь разыграть это как поплавок?
[23:13] <ParkinT> DRAT. Я не могу ввести косую черту в этом чате.
[23:13] <adams> / \
[23:13] <Джерри> / foo /
[23:13] <ParkinT> Есть ли контрольные персонажи, о которых я не знаю ?? Я думаю, что я просто отключил всю власть в Нью-Йорке!
[23:13] <AllanH> Если бы вы знали, сколько чисел было всегда впереди, вы могли бы использовать строковые функции
[23:14] <ParkinT> «ЕСЛИ» ты знал. Правильно.
[23:14] <ParkinT> Предположим, вы не
[23:14] <Джерри> обратный слэш перед fwdslash
[23:14] <ParkinT> Спасибо. Это еще больше усложнит это !!!
[23:14] <AllanH> Но ради нас НУЖНО получить это десятичное число!
[23:15] <ParkinT> /d*[.](d*)/
[23:15] <ParkinT> НЕТ. Предыдущие косые черты появляются тоже.
[23:15] <ParkinT> Вот как я бы подошел к этому. Косая черта «d» представляет любую цифру (цифра)
[23:16] <ParkinT> Мы знаем, что есть НЕИЗВЕСТНОЕ число цифр ДО десятичной точки.
[23:16] <ParkinT> косая черта d, за которой следует звезда d *
[23:16] <AllanH> не является ли «.» «Подстановочным знаком»?
[23:16] <ParkinT> Далее идет десятичная дробь. Тем не менее, точка является символом команды в RegEx, поэтому мы должны определить его как EXPLICIT
[23:17] <ParkinT> Точно, АлланХ
[23:17] <ParkinT> Но если вы поместите символы в квадратные скобки, они будут оценены как литералы
[23:17] <ParkinT> Так [.] Будет представлять точку
[23:17] <AllanH> и только ОДНА точка
[23:18] <ParkinT> Далее идут данные, которые мы пытаемся получить. Поэтому мы должны заключить его в фигурные скобки () для представления группы.
[23:18] <ParkinT> и эти данные ТАКЖЕ будут набором цифр с неизвестной длиной (d *)
[23:19] <ParkinT> Но предположим, что мы даже не уверены, что есть какие-либо цифры перед десятичной дробью?
[23:19] <AllanH> «звезда» означает ноль или более
[23:19] <ParkinT> В этом случае это d * [.] (D *) не будет работать
[23:19] <ParkinT> Вы правы. Я путал звезду и знак вопроса;
[23:20] <ParkinT>, что означает ОДИН или более. Плохой пример. Я должен был использовать? а потом объяснил звезду. * смущенный.
[23:20] <ParkinT> Чтобы лучше ответить на первоначальный вопрос, вот некоторые «основы» регулярного выражения.
[23:21] <ParkinT> Как указала AllanH, звезда означает ноль или более и относится к набору, который ей предшествовал.
[23:21] <AllanH> Мне нравятся Документы Mozilla для ссылки на Javascript
[23:21] <ParkinT> У вас есть ссылка?
[23:22] <AllanH> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
[23:22] <ParkinT> Это здорово! Теперь мы можем идти домой !!
[23:22] <AllanH> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
[23:22] <AllanH> Может и нет, Документы не самая простая вещь, которую нужно переварить
[23:23] <AllanH> напр. http://www.pcre.org/pcre.txt
[23:23] <ParkinT> RegEx трудно для большинства людей, потому что это может быть очень пугающим.
[23:24] <johnlacey> Я знаю, что у меня только второй кофе за день, и мой мозг немного взрывается, просто читая документацию Mozilla. лол
[23:24] <ParkinT> Как и все, если подойти к нему осторожно — по одному кусочку за раз — и попрактиковаться в малых дозах …
[23:24] <ParkinT> Синтаксис странный, и выбор символов делает его очень запутанным для чтения.
[23:24] <AllanH> Я только учусь по принципу «нужно знать» и все еще учусь.
[23:25] <johnlacey> Различаются ли регулярные репрессии между языками или они довольно универсальны?
[23:25] <ParkinT> Существует множество инструментов (онлайн и для настольных компьютеров), которые оценят RegEx. Они позволяют вам «тыкать и пробовать» различные модели
[23:25] <ParkinT> Как я уже говорил, «Регулярные выражения универсальны среди большинства языков программирования. Тем не менее, реализация зависит от языка «
[23:26] <ParkinT> Существуют общие правила синтаксиса, которые не различаются между языками.
[23:26] <AllanH> Я думаю, что после того, как вы разберетесь с базовым синтаксисом, они во многом похожи, по крайней мере, настолько, чтобы вы могли понять, как делать то, что вам нужно, обращаясь к Документам.
[23:26] <ParkinT> Ruby, например, распознает RegEx практически в любом месте, где может использоваться строка.
[23:27] <AllanH> и если это не двоичный файл, это текст
[23:29] <AllanH> Я думаю, что многие из
[23:30] <AllanH> Я думаю, много «инструментов», например. сопоставлять, заменять, разделять — одинаковы для разных языков
[23:30] <nandotinoco> Многие веб-разработчики впервые сталкиваются с RegEx, когда исправляют ошибку в файле .htaccess или пытаются выяснить, какие перенаправления URL-адресов. Есть ли у вас какие-либо советы или хитрость для этих случаев?
[23:30] <ParkinT> Абсолютно !!
[23:31] <ParkinT> Мой первый ответ на этот вопрос, nandotinoco, это «StackOverflow» !!
[23:31] <ParkinT> насмешливый
[23:31] <AllanH> Вы можете попробовать задать вопрос на http://www.sitepoint.com/forums/forumdisplay.php?97-Server-Configuration-Apache-amp-URL- форуме переписывания
[23:32] <nandotinoco> Так лучше 😉
[23:32] <ParkinT> Эти переписки кажутся своими зверями.
[23:32] <johnlacey> Я видел примеры, когда они проверяют для domain.com/directory и меняют его на domain.com/directory/
[23:32] <AllanH> В Apache есть такие вещи, как «флаги», которые иногда могут быть хитрыми, но синтаксис похож
[23:33] <AllanH> Да, нужно любить «дружественные URL»
[23:33] <ParkinT> Это верно. Захватив группы и затем применив то, что было захвачено, вы можете полностью переставить вещи
[23:34] <AllanH> и возможность перенаправить HTTP-запрос со старой страницы на новую.
[23:35] <ParkinT> Если вы хотите отточить свои навыки в RegEx, в Интернете есть множество загадок и кроссвордов, в которых используются регулярные выражения.
[23:36] <johnlacey> Не могли бы вы понравиться нам одной из этих головоломок? Звучит как веселье (но и вызов).
[23:36] <johnlacey> свяжись с нами *
[23:37] <ParkinT> Поиск …
[23:37] <AllanH> Как вы думаете, какая разница в производительности между использованием [a-zA-Z]…. [az] / i и [w]?
[23:38] <AllanH> я чувствую, что лучше всего читать, когда начинаешь, а затем работать более элегантно по мере продвижения
[23:38] <ParkinT> На этот вопрос сложно ответить, возможно, он различается в зависимости от языка и, я уверен, будет очень незначительным.
[23:39] <ParkinT> Вот тот, который я признаю, что я не смог завершить: http://www.coinheist.com/rubik/a_regular_crossword/grid.pdf
[23:39] <johnlacey> Спасибо, ParkinT
[23:39] <ParkinT> Но, лучше для начала, я только что нашел это в поиске Google: http://regexcrossword.com/
[23:40] <AllanH> строка длиной 30 символов, но читаемая, в сравнении с тем же эффектом, что и длина 8 символов, но ее нужно мысленно «перевести».
[23:40] <ParkinT> И это выглядит интересно… http://www.regexcrosswords.com/
[23:40] <ParkinT> Я согласен, АлланХ.
[23:41] <ParkinT> Разработчики, как правило, предпочитают «элегантность» и «сообразительность».
[23:41] <ParkinT> Я совершенно виновен, как обвинение.
[23:41] <ParkinT> Сжатие — это хорошая вещь, к которой нужно стремиться. Но удобочитаемость важна, потому что обслуживание кода является критическим (и очень дорогим).
[23:41] <AllanH> и, как вы говорите, с точки зрения производительности, незначительная разница
[23:42] <AllanH> но мы ДЕЙСТВИТЕЛЬНО хотели бы похвастаться;)
[23:42] <ParkinT> Если другой разработчик (или даже вы в будущем) испытывает трудности с расшифровкой намерения выражения ..
[23:42] <ParkinT>, что переводится как время.
[23:42] <ParkinT> LOL АБСОЛЮТНО.
[23:42] <johnlacey> Я полностью согласен — читабельность так важна.
[23:43] <AllanH> LOL добавить комментарий, который длиннее, чем подробный код
[23:43] <ParkinT> Возможно, мы должны извлечь урок из этих головоломок в режиме онлайн (каламбур) и построить курс регулярных выражений на «Обучаемые».
[23:44] <grrowl> irt w по сравнению с [az], w на самом деле медленнее, потому что соответствует LOT больше, чем просто az, включая «слова» многих других языков
[23:44] <AllanH> @ParkinT один для MC?
[23:46] <AllanH> правда, «слово» в Perl не всегда является английским словом
[23:47] <AllanH> напр. my_function
[23:47] <ParkinT> В то же время, «что такое несколько миллисекунд среди друзей?»
[23:48] <grrowl> да, разница в производительности очень мала … если вы специально не оптимизируете этот случай, всегда выбирайте наиболее читаемый код
[23:49] <AllanH> Так что мне интересно, что я бы посчитал основными необходимыми вещами, чтобы «получить» в первую очередь. побег персонажа приходит на ум;)
[23:50] <AllanH> и ^ начало и конец $
[23:50] <ParkinT> По моему опыту, «основы» — это те вещи, которые вы используете чаще всего.
[23:50] <ParkinT> Да. Начало и конец. Количество ? * + {.}
[23:50] <ParkinT> И (как я это называю) ярлыки: w W s S
[23:51] <ParkinT> d
[23:51] <ParkinT> и НЕ ^
[23:51] <AllanH> Я постоянно использую квантификаторы
[23:51] <AllanH> и классы персонажей
[23:51] <ParkinT> Это важно, потому что реализации MOST RegEx очень жадные.
[23:52] <ParkinT> Без квантификаторов вы могли бы сравниться гораздо дальше, чем предполагалось.
[23:53] <AllanH> true, сколько раз я видел поток, в котором ОП хотел один тег, но получал первый тег до последнего
[23:53] <ParkinT> Чтобы прокомментировать предыдущий комментарий, я нашел, что это очень, очень поучительно: http://regexcrossword.com/challenges/tutorial/puzzles/1
[23:54] <ParkinT> Нажмите на ПОМОЩЬ в верхней области навигации.
[23:56] <ParkinT> История регулярных выражений очень интересна. Это началось до появления компьютеров в любой форме, какой мы их знаем сегодня.
[23:57] <ParkinT> Согласно Википедии ( http://en.wikipedia.org/wiki/Regular_expression) около 1950 года. Я бы рискнул предположить, что никого из нас здесь не было. И * я * довольно старый !!
[23:58] <ParkinT> Спасибо всем, что нашли время для участия.
[23:58] <ParkinT> Sitepoint и Learnables представляют собой невероятно богатый ресурс для современных веб-разработчиков.
[23:59] <nandotinoco> Да, если кто-то не хочет задать последний вопрос, мы должны завершить обсуждение здесь.
[23:59] <ParkinT> Если есть что-то, чем вы увлечены или чувствуете себя очень комфортно, сообщите нам.
[23:59] <ParkinT> «Эксперт» — это часто только тот, кто хочет говорить об этом вслух.
[23:59] <nandotinoco> Большое спасибо за то, что уделили время AllanH и ParkinT и поделились некоторыми своими знаниями.
[0:00] <AllanH> Я хотел бы добавить, что вопросы регулярных выражений можно задавать и на других форумах.
[0:00] <ParkinT> Форумы Sitepoint !!
[0:00] <AllanH> http://www.sitepoint.com/forums/forumdisplay.php?34-PHP
[0:00] <AllanH> http://www.sitepoint.com/forums/forumdisplay.php?15-JavaScript-amp-jQuery
[0:00] <AllanH> http://www.sitepoint.com/forums/forumdisplay.php?36-Perl-amp-Python
[0:01] <nandotinoco> Конечно. Форумы всегда там как отличный ресурс. Спасибо всем, кто присоединился к нам. На следующей неделе мы говорим о SASS
[0:01] <ParkinT> На следующей неделе мы получим SASSY
[0:02] <AllanH> Добро пожаловать, nandotinoco, спасибо всем