Не можете избежать обратной косой черты с регулярным выражением?
Я использую следующее регулярное выражение
^[a-zA-Z0-9',!;?$^:\/`|~&" @#%*{}()_+.s=-]{1,1000}$
Я знаю, что это уродливо, но до сих пор он служит своей цели, кроме обратной косой черты, не разрешенной, как я думаю, потому что она сбежала, я также пытался вместо \ но те же результаты. Есть идеи?
5 ответов:
если вы помещаете это в строку внутри программы, вам может потребоваться использовать четыре обратные косые черты (потому что синтаксический анализатор строк удалит два из них при "де-экранировании" его для строка, а затем регулярное выражение нуждается в двух для экранированной обратной косой черты регулярного выражения).
например:
regex("\\")интерпретируется как...
regex("\" [escaped backslash] followed by "\" [escaped backslash])интерпретируется как...
regex(\)интерпретируется как регулярное выражение, которое соответствует одной обратная косая черта.
в зависимости от языка, вы можете использовать другую форму цитирования, которая не анализирует escape-последовательности, чтобы избежать необходимости использовать столько же - например, в Python:
re.compile(r'\')The
rперед кавычками делает его raw строка, которая не анализирует обратную косую черту экранирует.
если это не литерал, вы должны использовать
\\, чтобы получить\что означает экранированную обратную косую черту.это потому, что есть два представления. В строковом представлении вашего регулярного выражения у вас есть
"\\", что и отправляется в парсер. Парсер увидит\который он интерпретирует как допустимую экранированную обратную косую черту (которая соответствует одной обратной косой черте).
обратная косая черта
\является escape-символом для регулярных выражений. Поэтому двойная обратная косая черта действительно означала бы единственную, буквальную обратную косую черту.
\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.
от http://www.regular-expressions.info/charclass.html:
обратите внимание, что единственными специальными символами или метасимволами внутри класса символов являются закрывающая скобка (]), обратная косая черта ( \ \ ), каретка (^) и дефис (-). Обычные метасимволы-это обычные символы внутри класса символов, и их не нужно экранировать обратной косой чертой. Для поиска звезды или плюса используйте [+*]. Ваше регулярное выражение будет работать нормально, если вы избегаете регулярного метасимволы внутри символьного класса, но это значительно снижает читабельность.
чтобы включить обратную косую черту в качестве символа без какого-либо специального значения внутри класса символов, вы должны избежать его с другой обратной косой чертой. [\\x] соответствует обратной косой черте или x. закрывающая скобка (]), каретка ( ^ ) и дефис ( - ) могут быть включены, экранируя их с обратной косой чертой или помещая их в положение, где они не приобретают своего особого значения. Я рекомендую последнее метод, так как он улучшает читаемость. Чтобы включить каретку, поместите ее в любом месте, кроме как сразу после открывания кронштейна. [x^] соответствует x или каретке. Вы можете поместить закрывающий кронштейн сразу после открывающего кронштейна или отрицающего каретки. [] x]соответствует закрывающей скобке или x. [^] x] соответствует любому символу, который не является закрывающей скобкой или x. дефис может быть включен сразу после открывающей скобки, или прямо перед закрывающей скобкой, или сразу после отрицания каретки. Оба [- x] и [x -] совпадают х или дефис.
на каком языке вы пишете регулярное выражение?