Регулярные выражения - необходимость для программирования? [закрытый]

Я не думаю, что MySQL будет принимать объекты PowerShell, переданные ему по каналу - хотя, как говорит Стефан, вы можете использовать Get-Content и направить его к следующей команде.

Проверьте вопрос переполнения стека Готов ли PowerShell заменить мою оболочку Cygwin в Windows? по причинам, по которым они не скопировали оболочки Unix.

40
задан 6 revs, 5 users 67% 21 May 2009 в 07:18
поделиться

32 ответа

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

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

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



Original Comic

88
ответ дан 27 November 2019 в 00:58
поделиться

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

0
ответ дан 27 November 2019 в 00:58
поделиться

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

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

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

0
ответ дан 27 November 2019 в 00:58
поделиться

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

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

0
ответ дан 27 November 2019 в 00:58
поделиться

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

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

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

0
ответ дан 27 November 2019 в 00:58
поделиться

Simply, no. It all depends on what your program is set out to achieve.

Of course knowing what a RegExp is and a basic understanding of how they work can be useful in the future.

0
ответ дан 27 November 2019 в 00:58
поделиться

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

0
ответ дан 27 November 2019 в 00:58
поделиться

Regular Expressions is a powerful pattern matching language. And it is not limited to text strings. But as always, your code, your call.

0
ответ дан 27 November 2019 в 00:58
поделиться

Нет.

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

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

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

0
ответ дан 27 November 2019 в 00:58
поделиться

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

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

0
ответ дан 27 November 2019 в 00:58
поделиться

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

0
ответ дан 27 November 2019 в 00:58
поделиться

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

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

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

На самом деле, существует юбка из шпаргалки для девочек

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

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

1
ответ дан 27 November 2019 в 00:58
поделиться

Нет ... и Да,

Это очень похоже на один из тех вопросов «Следует ли мне выучить C». Никакие регулярные выражения никогда не являются единственным способом что-то сделать. Но они часто являются полезной абстракцией, которая упрощает код и может (я действительно думаю) даже сделать его более читабельным. Может быть, потому, что мне нравится Джеффа Фридла Mastering Regular Expressions , или, может быть, потому, что я выделяю на работе Perl. Но по какой-то причине я предпочитаю регулярные выражения. Теперь мне кажется, что использовать регулярное выражение проще, чем большинство других методов обработки строк.

1
ответ дан 27 November 2019 в 00:58
поделиться

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

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

1
ответ дан 27 November 2019 в 00:58
поделиться

I guess it is not a must but they will ease your life and save you so much time.

If you dont know how to use regular expressions you dont know what you are missing. But just looking at a person using them to complete a task makes you feel that it is a skill you should definitely have.

1
ответ дан 27 November 2019 в 00:58
поделиться

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

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

26
ответ дан 27 November 2019 в 00:58
поделиться

Да. Вы можете обойтись и без них, но вам действительно следует изучить хотя бы основы, поскольку большинство вычислительных задач могут их использовать. Вы избавите себя от боли и нервотрепки в долгосрочной перспективе. Создавать регулярные выражения намного проще, чем вы думаете, когда вы преодолеете начальную стадию «wtf».

45
ответ дан 27 November 2019 в 00:58
поделиться

Let me put it this way, if you have regular expressions in your toolkit, you'll save yourself a lot of time and energy. If you don't have them, you won't know what you're missing out on so you'll still be happy.

As a web developer, I use them very often (input validation, extracting data from a site etc).

EDIT: I realized it might help you to look at some common problems that regex is used for by looking at the regex tag right here on stackoverflow.

10
ответ дан 27 November 2019 в 00:58
поделиться

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

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

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

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;
17
ответ дан 27 November 2019 в 00:58
поделиться

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

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

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

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

7
ответ дан 27 November 2019 в 00:58
поделиться

If you care about developing a career as a software engineer, then yes. I hire software engineers and if they don't know the basics of using regular expressions, or have never heard of them, then I wonder how much experience they actually have across the entire spectrum of programming techniques. What else don't they know?

Most of the comments above say 'no, you can solve the problem in other ways' and they also mostly say the alternatives are more code and take longer to write... now think maintainability and how easy this bespoke code would be to change... Use a regular expression - then it's just a single line of code.

4
ответ дан 27 November 2019 в 00:58
поделиться

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

5
ответ дан 27 November 2019 в 00:58
поделиться

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

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

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

2
ответ дан 27 November 2019 в 00:58
поделиться

На самом деле, я считаю, что это необходимо ...

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

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

вместо

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

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

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

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

2
ответ дан 27 November 2019 в 00:58
поделиться

Одним словом, нет.

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

2
ответ дан 27 November 2019 в 00:58
поделиться

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

1
ответ дан 27 November 2019 в 00:58
поделиться

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

1
ответ дан 27 November 2019 в 00:58
поделиться

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

3
ответ дан 27 November 2019 в 00:58
поделиться

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

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

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

  • Выход : Хороший JSON.

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

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

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

Стоит ли их изучать? Да.

Обязательно? Нет, но я почти не знаю никого в этой области, кто не знаком с ними.

Трудно учиться? Нет вообще.

3
ответ дан 27 November 2019 в 00:58
поделиться

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

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

  2. Опубликуйте проблему на SO.

1
ответ дан 27 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: