這是依賴於編程語言和它的字符串處理選項。
例如,在Java字符串中,如果需要字符串中的文字反斜槓,則需要將其加倍。所以正則表達式\n
必須寫成"\\n"
。如果您打算使用正則表達式匹配反斜槓,則需要將其轉義兩次 - 一次用於Java的字符串處理程序,一次用於正則表達式引擎。因此,要匹配\
,正則表達式爲\\
,並且相應的Java字符串爲"\\\\"
。
許多編程語言都有特殊的「逐字」或「原始」字符串,您不需要轉義反斜槓。所以正則表達式\n
可以寫成普通的Python字符串,如"\\n"
或者Python原始字符串,如r"\n"
。 Python字符串"\n"
是實際的換行符。
這會變得令人困惑,因爲有時不會轉義反斜槓正常工作。例如,Python字符串"\d\n"
恰好可用作匹配數字的正則表達式,後跟換行符。這是因爲\d
不是Python字符串中公認的字符轉義序列,因此它保留爲文字\d
並以此方式提供給正則表達式引擎。 \n
被翻譯成一個實際的換行符,但恰好匹配正則表達式所針對的字符串中的換行符。
但是,如果您忘記將結果序列轉換爲有效字符轉義序列的反斜線,則會發生不良事件。例如,正則表達式\bfoo\b
匹配整個單詞foo
(但它與foobar
中的foo
不匹配)。如果您將正則表達式字符串編寫爲"\bfoo\b"
,則\b
將被字符串處理器轉換爲退格字符,因此會通知正則表達式引擎匹配<backspace>foo<backspace>
,這顯然會失敗。
解決方法:一定要使用,你必須逐字逐句的字符串或使用,你有他們的正則表達式文字(例如JavaScript的和Ruby的/.../
。)(例如Python的r"..."
,.NET的@"..."
。)。或者使用RegexBuddy自動將正則表達式轉換爲您的語言特殊格式。
要回到你的例子:作爲一個正則表達式的意思是「匹配任何一個反斜槓或換行符」
\\n
作爲一個正則表達式的意思是「匹配一個反斜槓,然後n
」
[\\\n]
。
你測試過什麼嗎?似乎是你可以輕鬆嘗試的東西。 – yoda
你在哪裏看到這些?在編程語言的字符串?您是否考慮到,在許多編程語言中,「\\ n」實際上是「\ n」,因爲您需要轉義「\」?因此,正則表達式只是'\ n' –