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]