Недостатки использования регулярных выражений - PullRequest
3 голосов
/ 28 июня 2011

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

.NET RegEx расследование "утечки памяти"

Итак, правильно ли говорить, что reg-ex вызывает накладные расходы памяти и не должен использоваться, если у вас есть другие варианты?Есть ли какие-либо другие неудобства для reg-ex (кроме того, что трудно учиться :))

PS Я занимаюсь разработкой приложения (c # .net), похожего на веб-сканер, который извлекает все ссылки и некоторую другую информацию, напримерзаголовок, метатеги и т. д. У меня есть возможность использовать HTML-пакет Agility вместо reg-ex.

Ответы [ 3 ]

8 голосов
/ 28 июня 2011

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

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

1 голос
/ 15 апреля 2013

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

1 голос
/ 28 июня 2011

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

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

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

...