ПРОГРАММИРОВАНИЕ / REGEXPS

Обсуждения регулярных выражений, которые сделают ваш день светлее

Что вы думаете о регулярных выражениях? Давай поговорим об этом!

Теперь у вас две проблемы.

Вы, как разработчик, неизменно сталкиваетесь со следующей поговоркой:

Некоторые люди, столкнувшись с проблемой, думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них две проблемы. ~ Джейми Вернер Завински.

Джейми придумал этот термин в 1997 году в ходе обсуждения USENET, чтобы противостоять предложенной идее встраивания Perl в Emacs (что, по ИМО, было не так уж и хорошо), и с тех пор он приобрел большое историческое значение. В поговорке обычно делается попытка показать, как чрезмерное использование регулярных выражений может оказаться проблематичным. Джеффри Фридл пытается отследить происхождение цитаты, хотя, похоже, это такой старый фольклор (он определенно старше меня!)

Регулярные выражения и контекстно-свободная грамматика ([X] HTML).

Если вы не соблюдаете дисциплину и не ставите очень строгие условия в отношении того, что вы делаете, сопоставление HTML с регулярными выражениями быстро превращается в безумие ~ Джефф Этвуд

Обычно считается плохой идеей пытаться анализировать HTML с помощью регулярных выражений, настолько, что это, по-видимому, довело одного пользователя Stack Overflow до безумия. Джефф Этвуд юмористически сравнивает это с Парсингом HTML в стиле Cthulu. Для тех, кто когда-либо (или все еще пытается) анализировать HTML с помощью регулярных выражений, вот, почему вам не следует этого делать.

Обсуждения стоит прочитать.

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

… Если ваш код или регулярное выражение невозможно понять без нескольких строк комментариев или отдельного инструмента для его анализа, то должен быть способ лучше ». ~ Дэйв, Coding Horror.

Никто не смотрит в будущее, не сверяясь с руководством ~ Уодделсворт.

Если вы еще этого не сделали, попробуйте познакомиться с Lookaround - Look-forward и Look-behind утверждениями нулевой длины. Я читал это снова и снова, но до сих пор не понимаю!

Я стараюсь использовать их, когда могу, и не путаюсь. Я ненавижу заставлять его работать - а потом другой разработчик смотрит на него, а затем просит меня объяснить, что он делает, и все, что я действительно сделал, это использовал конструктор Expresso . ~ Эрик Лейн, Coding Horror.

Я, наверное, использую регулярное выражение в течение 20 лет… мне все еще приходится смотреть на ссылку, наверное, 9 раз из 10. ~ Рыкинпо

Если вы когда-нибудь задумывались, стоит ли тратить время на изучение регулярных выражений на выбранном вами языке программирования:

Регулярные выражения - это несложно… Если позволить мастеру сделать это за вас, значит, вы больше не понимаете, что делает код. В конечном итоге вы занимаетесь программированием культа карго . ~ Кристиан М.

Я никогда не прощал Python за то, что он делал подробный синтаксис регулярных выражений с помощью библиотеки. Я думаю, что чистота важнее здравомыслия. ~ «Сликц.

Использование RegEx, когда синтаксический анализатор лучше, раздражает. Использование RegEx, когда стандартные языковые функции поиска или замены строк будут работать (и обычно в линейном времени), просто непростительно . - Jmucchiello.

Вот несколько интересных вопросов о регулярных выражениях:

«Регулярные выражения одинаковы для всех языков программирования?»

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

Какие опции у тех из нас, кто работает с несколькими языками? Что ж,

1. Google - Google для регулярных выражений на выбранном вами языке
2. Regex Buddy - всего за 39,95 баксов (Windows) получите однопользовательскую лицензию на RegexBuddyy, которая может конвертировать между несколько движков Regex.
3. regex101 - это проект с открытым исходным кодом (с онлайн-платформой), который даст вам возможность проверить свое выражение на некоторых распространенных языках. Он имеет превосходные функции, включая автоматическое создание объяснения вашего регулярного выражения при вводе.

«Могут ли регулярные выражения работать с разными языками?»

Да. Однако это во многом зависит от того, поддерживает ли ваш механизм регулярных выражений совпадения Unicode. Поскольку для поддержки нескольких человеческих языков требуется все больше и больше программного обеспечения, Консорциум Unicode разработал рекомендации по адаптации механизмов регулярных выражений для использования Unicode. Например, из различных разновидностей регулярных выражений, Java, XML и .NET framework используют механизмы регулярных выражений на основе Юникода. ("Источник").

Вот ссылки на все обсуждения:

Теперь у вас есть обсуждение двух проблем - Stack Exchange.



Что подразумевается под« Теперь у вас две проблемы ?
Software Engineering Stack Exchange - это сайт вопросов и ответов для профессионалов, ученых и студентов, работающих… softwareengineering.stackexchange.com »



Время признаться, рад, что это анонимно - Gray Matter на Imgur.



Использование регулярных выражений и злоупотребление регулярными выражениями - Джефф Этвуд в Coding Horror.



Разбор HTML The Cthulhu Way - Автор Джефф Этвуд на сайте Coding Horror.



Что вы думаете / переживаете о регулярных выражениях?

P.S. - Недавно я наткнулся на Regex Crossword, который предлагает кроссворды, составленные из регулярных выражений, и я думаю, что это действительно интересный способ попрактиковаться с регулярными выражениями!

Удачного кодирования!