簡體   English   中英

是否需要轉義Java中正則表達式的斜杠('/')字符

[英]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());  

我的問題:

  1. 這兩種模式之間有什么區別(從Java的角度來看),還是有什么區別?

  2. 從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM