Не можете избежать обратной косой черты с регулярным выражением?
Я использую следующее регулярное выражение
^[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 -] совпадают х или дефис.
на каком языке вы пишете регулярное выражение?