[英]Is there any need to escape the slash('/') character for regular expressions in Java
我有以下代碼片段:
Pattern patternOfSlashContainingBackSlash=Pattern.compile("\\/");
Pattern patternOfSlashNotContainingBackSlash=Pattern.compile("/");
String slash = "/";
Matcher matcherOfSlashContainingBackSlash = patternOfSlashContainingBackSlash.matcher(slash);
Matcher matcherOfSlashNotContainingBackSlash = patternOfSlashNotContainingBackSlash.matcher(slash);
//both patterns match the slash
System.out.println(matcherOfSlashContainingBackSlash.matches());
System.out.println(matcherOfSlashNotContainingBackSlash.matches());
我的問題:
這兩種模式之間有什么區別(從Java的角度來看),還是有什么區別?
從Java的角度來看,'/'字符只是正則表達式的一個普通字符(不是像'''這樣的特殊字符)嗎?
我運行它的java版本是1.8
這個問題與其他問題不同,因為它清楚地表明Java編程語言的模式“\\\\ /”和“/”是相同的。
非常感謝你!
/
不是Java正則表達式中的特殊字符。 "\\\\/"
相當於"/"
。
/
在Java正則表達式中並不特別,它在JavaScript中我們有語法/regex/flags
。 Java允許轉義字符,即使它們不需要它,可能會使這種正則表達式更具可移植性。 因此Pattern.compile("\\\\/")
和Pattern.compile("/")
行為相同。
BTW ]
本身並不是特殊的角色。 如果它不是[...]
構造的一部分,你不需要逃避它,但你被允許(至少在Java中,我不確定其他的正則表達式)。
正斜杠/
字符不是Java Pattern
表示中的命令字符(也不是普通的String
),也不需要轉義。
反斜杠字符\\
需要在Java String
轉義,因為它用於編碼特殊序列,如換行符( "\\n"
)。
例如String singleBackslash = "\\\\";
由於反斜杠也用於表示Java Pattern
表示中的特殊構造,因此可能需要在Pattern
定義中進行雙重轉義。
例如, Pattern singleBackSlash = Pattern.compile("\\\\\\\\");
有關涉及反斜杠的Pattern
構造的示例,請參閱API 。
沒有必要逃避斜線字符。 Java的正則表達式語法的參考是類Pattern的Javadoc。 在那里,它列出了所有具有特殊含義的字符。 該列表中不存在斜杠。
我認為人們逃避/
字符的原因是它們來自不同的正則表達式(如Javascript),你可以在兩個斜杠之間定義一個包含它的模式,如果你想匹配一個斜線,你需要逃避它。
var pattern = /\d\/\d/; // Valid pattern of 2 digits divided by a slash, which must be escaped.
但是,從Java的角度來看,它是等價的,因此沒有必要逃避它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.