Это зависит от языка программирования и его параметров обработки строк.
Например, в строках Java, если вам нужна буквальная обратная косая черта в строке, вам нужно удвоить ее. Таким образом, регулярное выражение \n
должно быть записано как "\\n"
. Если вы планируете сопоставлять обратную косую черту с помощью регулярных выражений, то вам нужно избегать ее дважды - один раз для обработчика строк Java и один раз для механизма регулярных выражений. Таким образом, чтобы соответствовать \
, регулярное выражение равно \\
, а соответствующая строка Java равна "\\\\"
.
Многие языки программирования имеют специальные "дословные" или "необработанные" строки, где вам не нужно избегать обратной косой черты. Таким образом, регулярное выражение \n
может быть записано как обычная строка Python как "\\n"
или как необработанная строка Python как r"\n"
. Строка Python "\n"
является действительным символом новой строки.
Это может сбить с толку, потому что иногда не удается избежать обратной косой черты. Например, строка Python "\d\n"
работает как регулярное выражение, которое должно соответствовать цифре, за которой следует новая строка. Это связано с тем, что \d
не является распознанной escape-последовательностью символов в строках Python, поэтому она хранится как литерал \d
и передается таким образом в механизм регулярных выражений. \n
переводится в фактический символ новой строки, но он совпадает с символом новой строки в строке, с которой проверяется регулярное выражение.
Однако, если вы забудете экранировать от обратной косой черты, где результирующая последовательность является допустимой escape-последовательностью символов, произойдут плохие вещи. Например, регулярное выражение \bfoo\b
соответствует целому слову foo
(но оно не соответствует foo
в foobar
). Если вы пишете строку регулярного выражения как "\bfoo\b"
, \b
s преобразуются в символы возврата на одну строку строковым процессором, поэтому механизму регулярного выражения предписывается соответствовать <backspace>foo<backspace>
, что, очевидно, завершится ошибкой.
Решение: Всегда используйте дословные строки там, где они есть (например, r"..."
в Python, .NET @"..."
), или используйте литералы регулярных выражений там, где они есть (например, в JavaScript и Ruby /.../
). Или используйте RegexBuddy , чтобы автоматически перевести регулярное выражение для вас в специальный формат вашего языка.
Чтобы вернуться к вашим примерам:
\\n
в качестве регулярного выражения означает «Соответствие обратной косой черты, затем n
»
[\\\n]
в качестве регулярного выражения означает «Соответствует либо символу обратной косой черты, либо символу новой строки».