Regular Expressions
Когда вы НЕ должны использовать регулярные выражения
Поиск…
замечания
Поскольку регулярные выражения ограничены либо регулярной грамматикой, либо контекстно-свободной грамматикой, существует множество распространенных злоупотреблений регулярными выражениями. Поэтому в этой теме есть несколько примеров того, когда вы НЕ должны использовать регулярные выражения, но вместо этого используйте свой любимый язык.
Некоторые люди, столкнувшись с проблемой, думают:
«Я знаю, я буду использовать регулярные выражения».
Теперь у них есть две проблемы.
- Джейми Завински
Соответствующие пары (например, скобки, скобки ...)
Некоторые механизмы регулярных выражений (например, .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, просто используйте библиотеку, которая разбирает ее правильно и служит ей как полезные объекты на вашем любимом языке! В итоге вы получите читаемый и более удобный код, и вы не станете
- RegEx соответствуют открытым тегам, за исключением тегов XHTML
- Анализ Python HTML с использованием регулярных выражений
- существует ли регулярное выражение для генерации всех целых чисел для определенного языка программирования