Regex - Должны ли экраны сбрасываться?

Возможный дубликат:
Как сопоставить дефисы с регулярным выражением?

Hyphen - специальный символ в регулярном выражении, например, для выбора диапазона, я мог бы сделать что-то вроде:

[0-9A-F]

Но вне квадратных скобок это правильный символ? Я тестировал это на нескольких онлайн-тестировщиках регулярных выражений, и дефисы, похоже, функционируют как обычный символ вне квадратных скобок (или даже внутри квадратных скобок, если он не находится между двумя символами - например, [-g], похоже, соответствует - или g) было ли оно сбежало или нет. Я не мог найти ответ на этот вопрос, но мне интересно, стоит ли избегать дефиса или нет.

Спасибо!

Ответ 1

Исправить на всех фронтах. Вне класса символов (то, что называются "квадратными скобками" ) дефис не имеет особого значения, а внутри класса символов вы можете поместить дефис в качестве первого или последнего символа в диапазоне (например, [-a-z] или [0-9-]), ИЛИ избежать его (например, [a-z\-0-9]), чтобы добавить "дефис" в ваш класс.

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

(На самом деле... мой опыт заключается в том, что много регексов используется людьми, которые не полностью заполняют синтаксис. В этих случаях вы обычно видите все экранированное (например, [a-z\%\$\#\@\!\-\_]) просто потому, что инженер не знает, что "особенного", а что нет... поэтому они "играют в безопасности" и обфускают выражение с избыточным обратным слэшем. Вы будете делать себя, своих современников и своих потомков огромную пользу, принимая время, чтобы действительно понять синтаксис регулярных выражений, прежде чем использовать его.)

Отличный вопрос!

Ответ 2

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

Внутри классов персонажей я не думаю, что один путь является обычным для другого; по моему опыту, обычно кажется, что нужно поставить либо первый, либо последний, как в [-._:] или [._:-], чтобы избежать обратной косой черты; но я также часто видел, как это ускользнулось, как в [._\-:], и я бы не назвал это un обычным.

Ответ 3

Обычно вы всегда ставите дефис первым в разделе соответствия []. EG, чтобы соответствовать любым буквенно-цифровым символам, включая дефисы (написанные длинным путем), вы использовали бы [-a-zA-Z0-9]