Экранирование одного символа с использованием класса символов - PullRequest
0 голосов
/ 18 марта 2019

В регулярном выражении обычным способом использования специального символа (\^$.|?*+()[]{}) в качестве литерала является, конечно, экранирование с обратной косой чертой:

\+\.

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

[+][.]

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

Так есть ли веская причина не делать это (производительность или иное)? Или все сводится к личным стилистическим предпочтениям?

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

1 Ответ

1 голос
/ 18 марта 2019

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

Таким образом, одна из возможных негативных особенностей шаблона [+][.] заключается в том, что он может оставитьбудущий читатель вашего регулярного выражения задается вопросом, не собирались ли вы включить в класс персонажей более одного персонажа.И, возможно, при определенных условиях этот читатель может даже изменить шаблон, чтобы «исправить» его, добавив символы в класс, который он считает ошибочно опущенным.

Может быть небольшое преимущество в производительности при использовании \+ более [+], поскольку последний может потребовать, чтобы механизм регулярных выражений составлял формальный список (содержащий только один символ).Но я ожидаю, что различия в производительности будут минимальными.

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