Поиск…


замечания

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

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

- Джейми Завински

Соответствующие пары (например, скобки, скобки ...)

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

Простые строковые операции

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

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

  • Разделить строку?

Например, следующий сниппт работает в Python, Ruby и Javascript:

'foo.bar'.split('.')

Что легче читать и понимать, а также намного эффективнее, чем (как-то) эквивалентное регулярное выражение:

(\w+)\.(\w+)
  • Проложить пробелы?

То же самое относится к конечным пространствам!

'foobar     '.strip() # python or ruby
'foobar     '.trim() // javascript

Что было бы эквивалентно следующему выражению:

([^\n]*)\s*$ # keeping \1 in the substitution

Анализ HTML (или XML, или JSON, или C-кода, или ...)

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

Если вы хотите читать HTML, или XML или JSON, просто используйте библиотеку, которая разбирает ее правильно и служит ей как полезные объекты на вашем любимом языке! В итоге вы получите читаемый и более удобный код, и вы не станете



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow