Подтвердить что ты не робот

Являются ли регулярные выражения обязательными для программирования?

Являются ли регулярные выражения обязательными для программирования?

4b9b3361

Ответ 1

Можно легко обойтись без них, но нужно (ИМХО) знать основы, по двум причинам.
1) Возможно, наступит время, когда RegEx - лучшее решение проблемы (см. Изображение ниже)
2) Когда вы видите Regex в чужом коде, он не должен быть 100% мистическим.

preg_match('/summarycount">.*?([,\d]+)<\/div>.*?Reputation/s', $page, $rep);

Этот код достаточно прост, но если вы не знаете RegEx, то этот материал в первом параметре может также быть марсианским. RegEx, который используется здесь, на самом деле довольно прост, как только вы изучите основы, и чтобы вы дошли до http://www.regular-expressions.info/, у них есть ALOT информации о RegEx и его различных впечатлениях на разных платформах/языках, у них также есть отличный учебник для начала работы. После этого проверьте RegexBuddy, он может помочь вам создать RegExs, и, когда вы их создадите, если вы посмотрите, что он делает, это может помочь вам он был самым лучшим $39,95, который я когда-либо проводил.


regular_expressions.png

Оригинальный комикс

Ответ 2

Да. Вы можете обойтись без них, но вы действительно должны изучить по крайней мере основы, поскольку большинство вычислительных задач могут их использовать. В конечном итоге вы сэкономите много боли и хлопот. Regex намного проще, чем вы думаете, как только вы перейдете к исходной стадии "wtf".

Ответ 3

Я бы сказал "нет", они не обязательны. Вы можете быть отличным программистом, не зная их.

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

Ответ 4

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

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

Например, это:

s = Regex.Replace(s, "[bcdfghjklmnpqrstvwxz]", "$1o$1");

требуется немного больше кода без регулярного выражения:

StringBuilder b = new StringBuilder();
foreach (char c in s) {
   if ("bcdfghjklmnpqrstvwxz".IndexOf(c) != -1) {
      b.Append(c).Append('o').Append(c);
   } else {
      b.Append(c);
   }
}
s = b.ToString();

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

string temp = "";
for (int i = 0; i < s.Length; i++ ) {
   if (
      s[i] == 'b' || s[i] == 'c' || s[i] == 'd' ||
      s[i] == 'f' || s[i] == 'g' || s[i] == 'h' ||
      s[i] == 'j' || s[i] == 'k' || s[i] == 'l' ||
      s[i] == 'm' || s[i] == 'n' || s[i] == 'p' ||
      s[i] == 'q' || s[i] == 'r' || s[i] == 's' ||
      s[i] == 't' || s[i] == 'v' || s[i] == 'w' ||
      s[i] == 'x' || s[i] == 'z'
   ) {
      temp += s.Substring(i, 1);
      temp += "o";
      temp += s.Substring(i, 1);
   } else {
      temp += s.Substring(i, 1);
   }
}
s = temp;

Ответ 5

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

Как веб-разработчик, я использую их очень часто (проверка ввода, извлечение данных с сайта и т.д.).

EDIT: я понял, что это может помочь вам взглянуть на некоторые распространенные проблемы, для которых используется регулярное выражение, глядя на тег regex. здесь, в stackoverflow.

Ответ 6

Я бы сказал, да.

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

Языки, поддерживающие регулярные выражения

  • Java
  • perl
  • python
  • PHP.
  • С#
  • Visual Basic.NET
  • ASP
  • powershell
  • javascript
  • ruby ​​
  • tcl
  • vbscript
  • VB6
  • XQuery
  • XPath
  • XSDs
  • MySQL
  • Oracle
  • PostgreSQL

IDE и редакторы, поддерживающие регулярные выражения

  • Eclipse,
  • IntelliJ
  • Netbeans
  • Гель
  • Visual Studio
  • UltraEdit
  • JEdit
  • Nedit
  • Notepad ++
  • Editpad Pro
  • VI
  • Emacs
  • HAPEdit
  • PSPad

И не забывайте grep и sed!

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

Практическое использование реального мира в этом самом ответе

Фактически, я действительно использовал регулярное выражение для создания этого сообщения. Вначале я перечислил языки, которые поддерживают его в прозе с разделителями-запятыми. Затем я передумал и изменил формат на маркированный список, выполнив поиск выражения (\w+), и заменив его на \n* $1 в JEdit. И чем больше опыта вы получите с ними, тем их использование станет более эффективным с точки зрения затрат для более коротких и более коротких наборов действий.

Ответ 7

Нет. Вы можете программировать годами, не касаясь регулярных выражений. Конечно, это будет означать, что в некоторых случаях, когда кто-то, кто знает RE: s, будет использовать их, вы бы сделали что-то еще. Существует всегда несколько способов решения конкретной проблемы, а регулярные выражения - это только один способ (очень эффективный и, возможно, популярный способ) выражения шаблонов.

Ответ 8

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

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

Ответ 9

По крайней мере, зная, что существуют регулярные выражения и для чего они могут быть использованы, необходимо абсолютное обязательство. В противном случае вам будет угрожать изобретать колесо во многих ситуациях. Если вы знаете о своем существовании, вы можете вдаваться в детали, как только вам придется их применять. BTW, теория регулярных выражений весьма интересна: -)

Ответ 10

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

Хотя я часто не использую регулярные выражения, они недавно пригождались:

  • Вход. Некоторые файлы словаря CSV с каким-то свободным форматом, несколькими переводами, высказываниями и т.д.

  • Выход: Nice JSON.

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

  • Первая попытка: Написал грамматику, но были некоторые грубые края, в основном специальные случаи, которые имели место всего лишь в 0-1% данных. Создание грамматики, которая ловит всех, была бы слишком-очень-точной.
  • Вторая попытка: я использовал простую грамматику, улавливающую основные поля, а затем передал остальную часть процедуре, которая применяла некоторые регулярные выражения. Это было быстро, концептуально проще, чем полная грамматика и забава писать тоже.

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

Стоит ли учиться? Да.

A должен? Нет, но я знаю почти никого в поле, которое не знакомо с ними.

Трудно учиться? Совсем нет.

Ответ 11

Одним словом, No.

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

Ответ 12

Собственно, я чувствую, что это необходимо...

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

http://ca.youtube.com/v/raINk2Ii1A4 (а не фактический URL-адрес, как пример)

вместо

http://www.youtube.com/v/raINk2Ii1A4

Другой программист ранее использовал "substr()" для извлечения идентификатора видео youtube, а из-за части ca.youtube.com идентификатор был извлечен неправильно.

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

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

Ответ 13

Нет. Я ужасно себя чувствую в регулярных выражениях, и все же я плохой программист. Подождите. Что?

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

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

Ответ 14

Хорошо, в теоретическом поле компьютерной науки это очень сильное и полезное "оборудование", поскольку с ним вы можете определить правильные языки и идентифицировать с ним NFA или даже DFA, поэтому докажите некоторую трудную теорему в теории вычислений или конечной автоматизации и формальных языков. В практическом программировании это очень полезно, так как с его помощью вы можете выполнять сложную манипуляцию строк относительно простым способом.

Ответ 15

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

Ответ 16

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

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

Ответ 17

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

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

Во-вторых, основные регулярные выражения соответствуют конечным автоматам (по теореме Клейна), что делает их принципиально важными для разработки алгоритма.

На самом деле для девушек есть юбка.

http://store.xkcd.com/xkcd/#RegexCheatSkirt

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

Ответ 18

Нет... и да,

Это очень похоже на один из вопросов "Я должен узнать C". Никакие регулярные выражения никогда не являются единственным способом сделать что-то. Но они часто являются полезной абстракцией, которая упрощает код и может (я действительно думаю) даже сделать его более читаемым. Возможно, это потому, что я люблю Jeff Friedl Освоение регулярных выражений или, возможно, его, потому что я нахожусь на работе в perl. Но по какой-либо причине регулярные выражения - это мой инструмент. Мне теперь легче использовать регулярное выражение, а затем большинство других методов манипулирования строкой.

Ответ 19

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

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

Ответ 20

Нет, у вас всегда есть два других варианта подходящих требований.

  • Спросите друга, который знает регулярные выражения.

  • Задайте проблему на SO.

Ответ 21

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

Ответ 22

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

Как и все, что имеет значение в программировании, вы узнаете его, вы его забываете, вы снова заново его начинаете.

Ответ 23

Нет.

В зависимости от того, чего вы пытаетесь достичь, Regex может быть полезным. Но я бы поставил под угрозу, что 80% или более программистов никогда не будут использовать Regex, примерно 15% или только изредка (и придется использовать его в Google), и лишь небольшая часть оставшихся людей поели Regex Ninjas.

Я нашел Regexr довольно хорошо для редких случаев, когда я использую Regex.

Кроме того, кто-то упомянет определенную цитату из jwz в течение ближайшей минуты или около того...

Ответ 24

Регулярные выражения - это мощный язык, соответствующий шаблону. И это не ограничивается текстовыми строками. Но, как всегда, ваш код, ваш звонок.

Ответ 25

Просто, нет. Все зависит от того, что ваша программа предназначена для достижения.

Конечно, зная, что такое RegExp, и базовое понимание того, как они работают, могут быть полезны в будущем.

Ответ 26

Я согласен с другими, что это, вероятно, не обязательно, но очень полезно иметь хотя бы базовое понимание. У меня есть обложка RegEx, опубликованная в моем кубе, которую я считаю очень полезной. http://regexlib.com/CheatSheet.aspx

Ответ 27

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

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

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

Ответ 28

Определенно нет, я (как и многие люди) программировал годами, не касаясь их. Тем не менее, как только вы узнаете их, вы начинаете видеть, где они могли быть полезны в прошлом: -)

Я бы сказал - просто прочитайте об основных принципах, чтобы вы знали, что такое RegExes, и что вы можете с ними делать, тогда, если вы когда-нибудь найдете, что они могут быть полезны, вы можете получить учебный/справочный веб-сайт, например http://www.regular-expressions.info/ и перейти прямо.

Ответ 29

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

Если вы поддерживаете продукт, который уже использует regexp, вы остаетесь без выбора.

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

Ответ 30

Не более, чем, скажем, знание HTML или возможность использования реляционной базы данных. Строго говоря, нет, они не являются требованием для программирования - они могут быть важными и фундаментальными на некоторых работах и, тем не менее, не имеют отношения к другим. Вы вряд ли будете использовать регулярные выражения (или HTML или SQL, если на то пошло) при написании драйвера устройства для нового чипа Ethernet. В моей области я иногда использую регулярные выражения в производственном коде, гораздо чаще в специальных сценариях для массажа отчетов и т.д. Я работал над одним проектом, где они были центральной функцией (приложение для анализа текста свободной формы для поиска определенные ключевые фразы для создания скомпилированного набора правил).