在Java中的正则表达式中,是否需要转义斜杠('/')字符?

3

我有下面的代码片段:

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编程语言,"\ /"和"/"模式是相同的。
非常感谢!

据我所知,这不会有太大的影响。在字符前面放置转义斜杠通常意味着该字符必须被视为字面字符...除非它具有某些特殊含义。在字面量的情况下,斜杠是可选的,因此不是必需的... IntelliJ还表示这是一个多余的字符转义。 - Wietlol
@radoh,我不认为这个问题是重复的,因为它还澄清了"\ /"和"/"模式之间没有区别的事实。谢谢。 - dj_frunza
5个回答

4

/在Java正则表达式中不是特殊字符。"\\/""/"等效。


4

/在Java正则表达式中并不是特殊字符,而在JavaScript中我们有语法/ regex / flags 。Java允许转义字符,即使它们不需要转义,可能是为了使这种正则表达式更加可移植。因此, Pattern.compile("\\ /") Pattern.compile("/")将表现相同。

顺便说一下,单独的]并不是特殊字符。如果它不是[...]构造的一部分,则无需转义,但允许您进行转义(至少在Java中,我不确定其他正则表达式的风格)。


3
斜杠字符/在 Java Pattern 表示(和普通的 String)中不是命令字符,因此无需转义。
反斜杠字符\ 在 Java String 中需要转义,因为它被用来编码特殊字符,如换行符("\n")。
例如:String singleBackslash = "\\"; 由于反斜杠同样用于标识 Java Pattern 表示中的特殊结构,所以在 Pattern 定义中可能需要进行双重转义。
例如:Pattern singleBackSlash = Pattern.compile("\\\\"); 请参阅API以获取涉及反斜杠的Pattern结构示例。

2

不需要转义斜杠字符。Java正则表达式语法的参考文献是Pattern类的Javadoc。在那里,列出了所有具有特殊含义的字符。斜杠不在该列表中。


2

我认为人们需要转义 / 字符的原因是因为他们来自不同的正则表达式引擎(例如Javascript),在这些引擎中,你可以通过将模式放在两个斜杠之间来定义一个模式,如果想要匹配一个斜杠,你需要对其进行转义。

var pattern = /\d\/\d/; // Valid pattern of 2 digits divided by a slash, which must be escaped.

从Java的角度来看,它是等价的,因此不需要进行转义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接