Чи обов'язково кожен програміст вивчати регулярні вирази? [зачинено]


82

Я новачок у програмуванні, і на співбесіді у мене з’явились питання щодо регулярних виразів; зайве сказати, що я не міг відповісти Тож мені було цікаво, чи варто вчитися регулярному вираженню? Чи обов’язково це для кожного програміста всіх полів? Або це необхідно для програмування для деяких конкретних полів?

Пов’язані запитання:


55
Я особисто знаю, що вони є, коли їх використовувати та як синтаксис google. знизує плечима
Тянна

35
Це обов'язково для всіх енергетичних користувачів. І програмісти повинні бути споживачами енергії, щоб бути продуктивними.
SK-логіка

8
Чому б ти не хотів їх вивчати? Ви вже стикалися щонайменше з однією ситуацією, коли вам було б корисно їх знати. Чи не може це пояснити, що в майбутньому ви можете опинитися в подібній ситуації?
FishBasketGordo

23
Тільки ті , які працюють з текстом :)
Стів Джексон

Відповіді:


113

Регулярні вирази - це такий неймовірно зручний інструмент, доступний на багатьох мовах, що більшість розробників рано чи пізно їх вивчить.

Для інтерв'юера - це хороший спосіб дослідити досвід під час співбесіди. Якщо ви берете інтерв'ю у когось, хто претендує на багаторічний досвід, який не розуміє їх, вам потрібно копати далі.


4
Я згоден, це гарне запитання для будь-якого досвідченого розробника. Але запитувати нового випускника, який не має досвіду роботи щодо них, мабуть, трохи несправедливо - хіба що вони справді хотіли відфільтрувати здобувачів, які не мають практичного досвіду програмування.
SK-логіка

2
@ SK-логіка: Залежить від школи. У всіх нас був обов'язковий курс на 2-му курсі, який досить сильно використовував регулярні вирази (я визнаю, саме там я зачепився за них;)). І більше кількох курсів вищого рівня знову їх виховували, хоча ніколи не так інтенсивно.
FrustratedWithFormsDesigner

Погоджений з коментарями вище - я б не очікував, що хтось із шкіл, який неочікується, обов'язково знає регулярні вирази. Але я все-таки можу запитати.
ptyx

13
Я математик, тому не маю офіційного досвіду в галузі інформатики, але я б подумав, що реджекси насправді викладають на курсах коледжу, одночасно відкидаючи граматики, аналізатори, автомати та ін. Я насправді очікував, що хтось із коледжів, що вийшов із коледжу, буде краще знати, що досвідчений програміст, який не вивчає CS. : - /
Андреа

8
@Andrea, коли я навчався в університеті (BS з інформатики), регулярно висловлювались, коли вивчали граматику та автомати. Однак висвітлювалась лише формальна концепція, а не додатки. Ми не вивчили синтаксис регулярного вираження, сумісний з POSIX або Perl, або як їх використовувати в кодуванні. Ми навчилися малювати діаграму стану автомата з кінцевими станами, писати, що як регулярний вираз тощо. Були задіяні грецькі літери, а не grep та текстові файли.
Адам Яскевич

54

Регулярні вирази - це інструмент. Це буває дуже корисним інструментом, тому багато людей вирішують навчитися ним користуватися. Однак для вас не існує жодної «вимоги» навчитися користуватися цим конкретним інструментом, більше того, як є «вимога», щоб ви дізналися що-небудь інше.


19
Це так само правдиво, як сказати, що розуміння булевої логіки корисно, але не потрібно.
Oded

1
@Oded: Я не знайшов користі для булевої логіки, яку викладав у своєму курсі.
DeadMG

16
@DeadMG, я весь час використовую булеву логіку, наприклад, у перетвореннях: if (!(foo && bar))=> if (!foo || !bar). Можливо, ви користувались ним і не зрозуміли, або, можливо, вас не навчили потрібного матеріалу.
zzzzBov

7
Як контроль версій? Або тестування програмного забезпечення?
Конрад Рудольф

2
@ruakh - я згоден, що вони надзвичайно корисні; Я сам їх постійно використовую. Я думаю, що всі програмісти повинні навчитися використовувати реджекси в якийсь момент своєї кар’єри. Питання, однак, не задавав цього.
ейканал

33

Я не був би здивований, якби, наприклад, ігровий програміст або програміст в LHC ніколи не вчився регулярних виразів. Я навіть можу дати програмісту ігор передати, що не знає SQL.

Але, якщо ви працюєте в будь-яких інформаційних системах, і якщо ви не знаєте регулярних виразів, ви робите собі послугу.

З іншого боку, я б не очікував, що ваш стандартний програміст IS знатиме математику матриці, якою буде програміст ігор. Існують чіткі дисципліни програміста, однак, нам належить потрапити під парасольку "інформаційних систем".


1
Програмісти LHC можуть використовувати регулярні вирази для пошуку файлів даних, створених датчиками. Ігрові програмісти можуть використовувати регулярні вирази для пошуку файлів журналів, створених їх іграми. Гаразд, їм, можливо, не доведеться , але це, мабуть, полегшить такі завдання.
FrustratedWithFormsDesigner

1
Я погоджуюся, але якби я брав співбесіду на посаду програміста ігор, я все-таки найняв би когось, якби вони не знали, що таке регулярне вираження. Якби я найняв когось у традиційній ролі бізнес-програмування, який не знав, що таке регулярні вирази, вони, ймовірно, не будуть наймані.
Джонатан Річ

Гадаю, це справедливо.
FrustratedWithFormsDesigner

7
Фізики частинок здебільшого працюють у однотипних середовищах, але, як і все, що пов'язано з комп'ютером у цій громаді, більшість навичок передаються усними традиціями. Рівні витонченості в регулярних виразів різні. Але ми не шукаємо дані за допомогою регулярних виразів: їх занадто багато, і це не в текстових форматах. Ми шукаємо журнали та спеціальні БД, код та документацію на півдобові, як і всі інші.
dmckee

1
@FrustratedWithFormsDesigner, я б не наймав ігрових програмістів, які не знали регулярного виразу. Програмування за своєю суттю є інформаційно-інтенсивним незалежно від галузі . Неважливо, чим ви займаєтесь - у будь-якій дисципліні ви маєте вихідний код, текстові редактори, здатні до регулярних виразів, та файли журналів. Без регулярного вираження ви будете значно менш ефективними у виконанні певних завдань (навіть якщо вам не потрібно писати жодного рядка регулярного вираження в гру, що поставляється). Я не кажу, що регулярний вимір потрібен програмісту ігор. Я просто кажу, що не наймав би того, хто цього не знав.
Бен Лі

22

Регулярні вирази - це дуже короткий спосіб виразити, як відповідати шаблонам у тексті.

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

Вони є хорошим інструментом, який можна мати у вашій панелі інструментів, і я би сподівався, що будь-який досвідчений програміст знатиме, як ними користуватися.

Одним з найкращих ресурсів для вивчення регулярних виразів є книга Джеффі Фрідла « Оволодіння регулярними виразами» . Він досить просунутий, тому ви, можливо, захочете прочитати його, коли маєте ще досвід.

Ви можете почати з підручника на регулярній-expressions.info .


2
Це для мене справа смаку. Я ніколи насправді не мав потреби в них. Я використовував їх у кількох проектах, тому я знаю, як вони працюють, але я міг легко обійтися без цього і бачив, як їх зловживають частіше, ніж я відчував у них потребу. Для спрощення шаблону, і ви можете також використовувати маніпуляції з рядками для складної, і це швидше використовувати (e) BNF, принаймні, якщо ви, як я, звикли працювати з парсерами
Rune FS

15

На відміну від більшості відповідей тут, я не думаю, що знання reg exs не є необхідним вмінням бути продуктивним програмістом. Коли я опитую кандидатів на посаду, я б заглибився, якби вони почували себе змушеними вдосконалювати свої навички рег. Чому? їх часто використовують у місцях, тому що їм подобається правильний молоток, але часто те, що вам потрібно, було викруткою. Шукайте ТАК для HTML та regex, і ви побачите досить багато питань і досить багато причин, чому регулярний вираз не відповідає.

Здатність робити належне OOD потрібна, перш ніж я буду виступати за наймання респондента, знання регулярних висловлювань, безумовно, ні. І я насправді не думаю, що хтось вважає, що ти можеш бути, є більш продуктивним програмістом, що знає виразки, але не має таких областей, як аналіз, проектування та знання використовуваних рамок.

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


Програмісти, які не знають регулярних виразів, часто створюють велику купу WTF, коли регулярний вираз буде працювати дуже добре. Програмісти, які ТОЛЬКО знають регулярні вирази, часто створюють меншу, але масово неправильну купу WTF, намагаючись обробити нерегулярні мови (наприклад, HTML) з регулярними виразами.
Кевін Клайн

14

Незалежно від домену, в якому ви працюєте, регулярні вирази є корисним інструментом, який потрібно знати, оскільки більшість мов програмування написані як звичайний текст. Таким чином, Regex - це чудовий спосіб маніпулювати вихідним кодом та переробляти його, і він вбудований у багато текстових редакторів. Я бачив незліченну кількість програмістів, які вносять неодноразові зміни у вихідні файли, коли регулярний вираз робить зміни набагато швидше та точніше.

Про це говорить глава 3 Прагматичного програміста, коли звичайний текст є "основною сировиною програмування".


Чому ви просто не використовуєте ідею, яка підтримує рефакторинг?
NimChimpsky

2
Якби я поставив це запитання в цій публікації, я поставив би вам галочку. Це єдина найважливіша причина, за яку я ніколи не наймаю когось, хто не знав регулярного виразу. Це потужний інструмент редагування коду та пошуку журналів , навіть якщо вам ніколи не потрібно писати єдиний рядок коду, який його використовує. Хтось не знає, що це буде на замовлення менш ефективними при певних щоденних завданнях.
Бен Лі

10

Джефф Етвуд написав чудовий блог про регулярні вирази, в ньому є ця дивовижна цитата:

Some people, when confronted with a problem, think "I know, I'll use regular 
expressions." Now they have two problems. [Jamie Zawinski]

Також є чудова відповідь на гарне запитання щодо переповнення стека, який ви можете перевірити.

Вам слід остаточно трохи знати про це. Регулярні вирази легко засвоїти, але їх важко засвоїти. Вам не потрібно дізнаватися все про нього, щоб почати користуватися ним. Просто будьте уважні з цього приводу.

 

тл; д-р

Вам потрібно знати про технологію, щоб ви могли добре прийняти рішення, коли її використовувати.


8

Я працюю у вбудованій кодовій базі, у якій немає бібліотеки регулярних виразів. Для виконання певного завдання знадобилося 275 рядків коду, а для налагодження всіх важливих випадків між тестером та розробником знадобилося близько двох тижнів. Пізніше я написав функцію робити те саме, що є частиною утиліти javascript. Точна ж завдання з використанням регулярних виразів використовуються 10 рядків коду і прекрасно працював близько 15 хвилин.

Вам потрібні регулярні вирази? Технічно це не так, але нерозумно навмисно залишатись невідомим інструменту, який є ефективним.


6

процитувати ще одну відповідь:

Регулярні вирази - це дуже короткий спосіб виразити, як відповідати шаблонам у тексті.

Тож якщо це важлива частина вашої роботи, мабуть, кращий спосіб проектувати систему, яку ви розробляєте. Якщо багато тексту не є доменом, специфічним для вашої області (наприклад, біоінформатика).

Я працював над трьома різними системами підприємств (у трьох різних компаніях протягом десяти років), і написав їх менше п'яти разів, і це включає копіювання та вставлення основного валідатора електронної пошти двічі.


2
Багато тексту завжди залежить від домену. Зрештою, ви програміст . Текст (у вигляді вихідного коду) - це ваш домен. Ефективне маніпулювання текстом із регулярними виразами робить вас більш ефективним програмістом.
кількість

2
@quanticle, яка не має жодного сенсу. Ви фактично маніпулюєте своїм вихідним кодом регулярними виразами? Це звучить як абсолютний кошмар. Регулярні вирази є частиною вашого коду, і ваш код взаємодіє з даними, що стосуються конкретного домену.
NimChimpsky

3
Я маніпулюю вихідним кодом регулярними виразами. Переробляння великих фрагментів коду вручну є виснажливим і схильним до помилок. Використання редактора, який підтримує регулярне пошук та заміну виразів (підказка: майже кожен редактор підтримує пошук і заміну regexp) значно спрощує рефакторинг.
кількість

3
@Dunk він не каже, що це великий приріст ефективності протягом життя проекту, а скоріше, що це може бути великий приріст за невеликий проміжок часу. Я також зробив рефакторинг, де було сотні, навіть тисячі змін у десятках файлів. Протягом життя проекту заощаджені години незначні, але я, безумовно, не хотів витрачати години або дні, які знадобляться, щоб зробити ті самі зміни вручну. Сучасні IDE можуть зробити це для вас, не написавши регулярний вираз, але іноді це не вдається (скажімо, наприклад, загальну схему призначення).
jmoreno

2
@NimChimpsky Regexps працює скрізь. IDE та інструменти рефакторингу працюють лише для певних мов. Наприклад, чи дозволить ваш інструмент рефакторингу переглядати всі мої шаблони та знаходити / видаляти рядок, схожий на номер телефону ( sites.google.com/site/steveyegge2/… )?
кількість

4

Регулярні вирази можна розглядати як дуже корисний, крос-мовний, крос-платформний, інструмент для обробки. Я можу використовувати регулярний кодекс у своєму коді, я можу використовувати регулярний редактор у своєму редакторі, я можу використовувати регекс у командному рядку!

Це не просто те, що вам потрібно, або варто їм навчитися. Це більше схоже

ОЦЕ ТАК! Я люблю REGEX!


4

Для того, щоб бути чудовим програмістом, вам не потрібно знати всі маленькі вигадки щодо регулярних виразів, тим більше, що всі вони мають тенденцію дещо відрізнятись від різної реалізації та мов програмування. Те , що ви дійсно повинні знати,

  • Що таке регулярні вирази та регулярні вирази.
  • Які речі вони роблять ефективно (розбирають звичайні мови)
  • Які речі є неефективними (розбирають вкладені речі, використовуючи тонни зворотних посилань)
  • Де отримати інформацію про синтаксис, коли вам потрібно прочитати чи написати.

У будь-якому випадку, вам навіть не потрібно дуже сильно хвилюватися, якщо знадобиться занадто багато зусиль, щоб навчитися їх в першу чергу. Найпростіші оператори ( ., *, |, ()і т.д.) майже повсюдно присутні і пройти довгий шлях!


Я думаю, це справді хороший момент. Знати, як використовувати зворотні посилання та інші вдосконалені функції деяких двигунів РЕ, лише корисно. У багатьох / більшості випадків поєднання використання РЕ з трохи логіки є більш зрозумілим та легшим у обслуговуванні.
Марк Бессі

3

Як вже було сказано, Regex - це інструмент , дуже корисний інструмент IMHO.

Розглянемо цей приклад:

//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
} 

Лише один рядок, який, наприклад, перетворить таке число, як 1000000.00, у "1,000,000.00"

Використання будь-якого іншого методу буде набагато складніше


2
і це не складно? для цього використовується кілька спеціальних функцій, які не є у стандартному наборі регулярних виразів. проста довжина і заповнення зробили б для цього чудово
храповик виродка

2

Це не обов'язково. Вам просто потрібно знати про їх існування та коли ними користуватися. Особливості синтаксису легко знайти та отримати правильну інформацію за допомогою google та онлайн-інструментів.


2

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

Справжній програміст знає їх регулярні вирази

Це трохи упереджено, оскільки я здебільшого займаюся веб-програмуванням, де регулярні вирази - це те, на що ви неодмінно стикаєтесь, як на стороні сервера, так і на стороні клієнта. Якби ви були програмістом для складання вбудованої системи в посудомийній машині, ви, мабуть, не зустрічали б регулярних виразів. Але це все-таки стане в нагоді, оскільки ви в більшості випадків більше здатні володіти своїм середовищем розробки, коли ви знаєте регулярні вирази (пошук і заміна, пошук файлу, пошук у декількох файлах тощо).

Крім того, вам буде легше визнати колегами-програмістами, якщо ви це знаєте.


Крім того, марно вивчити цілі специфіки напам'ять, оскільки існує дуже багато різних діалектів. Натомість спробуйте зосередитись на вивченні основ: (1) винайдіть кілька простих зворотних позначок та вивчіть значення. * + {} [] () і - і кілька основних класів. (2) з даними специфікацією у ваших руках, спробуйте зрозуміти, що відбувається в регексерах, на які ви зіткнулися.
Арон Седерхольм

Для чого ви використовуєте reg exps в yr web dev. Це те, що я роблю, і я використав, як 5 разів за 10 років +.
NimChimpsky

Для початку: Розбір або підтвердження введення користувача (наприклад, електронна пошта, поштовий індекс / поштовий індекс, форми пошуку користувачів). Але також для цілей I18n та l10n для користувацьких та змінних рядків перекладу на декілька мов / мов. І вони впевнено приходять на допомогу в виявленні помилок і досить багато впорядкування помилок. І у світі CMS / блогів / коментарів для вікі / розмітки на форумі. Для зовнішніх даних (введення користувача, скребковані сторінки, синхронізовані ресурси тощо) розбір, обробка та перезапис вмісту / посилань / будь-якого іншого. Плюс до багатьох цілей статистики та реєстрації журналів (виявлення браузера, сортування реферерів, ...)
Aron Cederholm

-1 за такий шалено невідомий коментар "Справжній програміст ..."
Данк

Це досить поверхневий спосіб перевірки вводу користувачів, і я б переконався, що ваш регекс був 100% точним (перевірка електронної пошти відома). І я не переробляю ці "користувацькі та змінні рядки перекладу на декількох мовах / локалях", які ви перекладаєте між мовами, використовуючи regex - er wtf? Цілі статистики - ви робите статистику з регулярними виразами? Переписування посилань / вмісту з регулярними виразами для мене звучить як кодовий запах.
NimChimpsky

1

Це обов’язково? Ви вже знаєте, що ОБОВ'ЯЗКОВО знати: що вони існують, що вони є і для чого вони використовуються. Ваше завдання програміста - вирішення проблем. Тепер ви знаєте достатньо, щоб почати їх включати у своє рішення для вирішення вашої проблеми. Ви повинні вивчити регулярні вирази? Абсолютно. Пріоритет залежить від вас ... є завдання, де вони будуть використовуватися щодня, і роботи, де вони ніколи не будуть використовуватися. Простим керівництвом буде те, наскільки потрібно узор, що відповідає проблемам, які ви очікуєте зіткнутися.


1

Гм, мені потрібно розділити комами і вивести цей список рядків, дозволити мені записати функцію, що містить цикл for, який бере аргумент роздільника, і продовжувати додавати їх разом ... або я можу просто використовувати цю існуючу команду "приєднання".

Мені потрібно сортувати ці складні об'єкти на основі пари атрибутів, які має кожен об'єкт, дозвольте собі нагадати, як написати функцію сортування, яка це робить, о, не чекайте, я можу просто використовувати існуючу стандартну функцію сортування, яку підтримує ця мова. Мені доведеться навчитися писати спеціальний компаратор, але це не повинно бути занадто важким, це, очевидно, краще, ніж підтримувати власну функцію сортування.

Мене трохи лякає ідея віртуальних методів, але це повинно допомогти мені зменшити ці списки, кожен для предметів іншого типу, аж до одного списку. Тоді мені не доведеться писати півдесятка подібних заяв, обробляючи кожен список по-іншому. Здогадуюсь, я мав би важко вчитися та вивчати ці речі, тому що мій код буде набагато простішим та чистішим, якщо я це зроблю.

Мені потрібно витягнути з цього текстового файлу ці пари слів і значень серед усього цього іншого шуму, дозвольте мені написати п'ятдесят рядкового аналізатора, щоб прочитати персонажів один за одним, і якщо один із символів схожий на початок того, що я шукаю, я встановлю цю змінну стану і почну розбирати її по-різному і так далі і т. д. ... звичайно, мій випадок, очевидно, такий особливий, що ніхто більше не стикався з такою проблемою, як раніше, і винайшов загальне рішення, яке займає один рядок коду, щоб це зробити. Це нагадує мені, що я мав би взяти ті книжки програмування, які я ніколи не читав, до книгарні секонд-хенду.


1

Коротка відповідь: Ні, але .... знання - це сила.

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

Один із прикладів: Регекс електронної пошти, який я скопіював та вставив, не допускав періоду чи плюсу в електронній пошті, дозволений у специфікації електронної пошти. Насправді багато людей використовують gmail за допомогою actualemail+sitename@gmail.com, щоб фільтрувати "ім'я сайту" легко, якщо вони вирішили спамувати.


0

регулярні вирази? Гммм ... іноді корисно їх знати, але в більшості випадків ти завжди використовуєш те саме. Я використовую регулярно регулярні вирази, але не можу сказати, що з цим мені добре. Мені це зовсім не подобається, і я думаю, що є важливіші речі, ніж регекс.

Але у валідації формулювачів або даних дуже корисно. Я думаю, що майже вся професійна форма підтверджена регулярним виразом. ASP.NET, використовуючи його.

Але взагалі: Спробуйте зробити вираз, коли вам це потрібно, і збережіть його. Ви, сподіваємось, використовуватимете їх не раз. Але не витрачайте час на RegEx!


0

Це залежить від області / платформи, в якій ви працюєте

  1. Для настільних програм ви можете прожити життя kool, нічого не знаючи про регулярні вирази. Але зауважте, Visual Studio має регулярний пошук виразів, але мені цікаво, чи хтось користується ним регулярно. Я не думаю (ви повинні спочатку виправити своє регулярне вираження, тому що ви можете здійснити пошук :)).

  2. Як веб-розробник вам, швидше за все, доведеться вивчати регулярне вираження. Ви можете піти від цього, оскільки ви можете легко знайти фрагмент коду в Інтернеті, який буде вам достатньо, але навчання допоможе.

Є такі сфери, як документація, судові справи, юридичні матеріали, де регулярне вираження є незамінним інструментом. Ви повинні це знати. Якщо ви цього не зробите, ви просто не отримаєте роботу.

Отже, коротше, якщо це не є частиною посадової інструкції, навіть не турбуйтеся про це. Якщо вам подобається вчитися цьому, вивчіть це для задоволення.


0

Регулярні вирази є дуже корисним інструментом, і існує маса ситуацій, коли програміст повинен їх використовувати. Ви не повинні навчитися їх напам’ять усі. Просто скористайтеся посиланням і виконайте своє завдання. Після 10-20-50-100 (залежно від програміста) завдань, де ви використовували регулярні вирази, ви знаєте їх напам’ять. Вони навчаються самі, ви не повинні їх особливо вивчати.


0

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

Я дуже вважаю за краще регулярні вирази вважати типом знань, що розширює розуміння того, як працюють комп'ютери. Після того, як хтось справді отримує те, що є звичайною мовою, і ви можете висловити це за допомогою трьох простих операцій, я вважаю, що це дає їм щось більше, ніж просто інструмент для перевірки простих рядків.

Вони стають здатні краще зрозуміти розбір в цілому, що корисно майже для кожного виду програмування, і краще зрозуміти, як працюють інструменти, які ми використовуємо на регулярній основі (компілятор, редактор, браузер тощо).

Звичайно, практичні переваги використання регулярних виразів величезні. Навіть якщо ви не «програмуєте» з ними - я постійно використовую регулярні вирази, роблячи пошук / заміну в своєму редакторі, і вимірюю, наскільки більш продуктивними вони роблять мене.

Тож, поки це не потрібно, я думаю, що це один із перших інструментів, який програміст повинен засвоїти.


0

Роб Пайк не вважає так :

Регулярні вирази важко записати, важко писати і можуть бути дорогими відносно інших технологій. Стандартні методи лексики та синтаксичного розбору настільки прості в написанні, настільки загальні та настільки пристосовані, що немає причин використовувати регулярні вирази.

Інший спосіб дивитись на це - лексери та синтаксичний аналіз відповідають статично визначеним шаблонам, але сила регулярних виразів полягає в тому, що вони надають спосіб динамічно виражати візерунки. Вони чудові в текстових редакторах та інструментах пошуку, але коли ви знаєте, що під час компіляції потрібні речі, регулярні вирази приносять набагато більше загальності та гнучкості, ніж вам потрібно.

Заохочення регулярних виразів як панацеї від усіх проблем з обробкою тексту - це не лише ледачий і поганий інженерій, але також підсилює їх використання людьми, які взагалі не повинні їх використовувати.

Варто відзначити, що Пайк визнає, що їм, звичайно, є місце, і IMHO, регулярні вирази - це досить потужний інструмент, той, який абсолютно винагороджує час, який я витратив на навчання, і з цього погляду я б абсолютно рекомендував вчитися їх. Але можливо, справжнє питання полягає в тому, що вони допомагають бандажам, що дозволило мені піти з того, що знаю менше про лексинг та розбір, ніж я повинен. :)


0

Дозвольте лише сказати, що регулярні вирази часто є правильним інструментом для роботи і є досить зручним, особливо з додатками, які багато обробляють текст. Однак запам'ятовування їх - це безумство. У мене на стіні приклеєно шпаргалку, на якій є всі спеціальні символи, якорі, класи персонажів, модифікатори візерунків, метахарактеристики ... Просто витратьте 20 хвилин на те, щоб навчитися ними користуватися і отримати шпаргалку, щоб зберегти відстежувати все інше. Все, що вам потрібно, - це вміти писати регулярний вираз, коли вам це потрібно, як правило, кожні 6 місяців - приблизно так часто, як ви стикаєтеся з проблемою, коли вони є найкращим інструментом для використання в роботі. Якщо ви не перебуваєте в команді Perl, Latex, Emacs або іншої важкої команди з обробки тексту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.