Java中正则表达式是否需要转义斜杠(';/';)字符
我有以下代码片段:Java中正则表达式是否需要转义斜杠(';/';)字符,java,regex,Java,Regex,我有以下代码片段: Pattern patternOfSlashContainingBackSlash=Pattern.compile("\\/"); Pattern patternOfSlashNotContainingBackSlash=Pattern.compile("/"); String slash = "/"; Matcher matcherOfSlashContainingBackSlash = patternOfSlashContainingBackSlash.matcher
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正则表达式中并不特殊,而是在JavaScript中我们有语法/regex/flags
。Java允许转义字符,即使它们不需要转义字符,这可能是为了使这样的正则表达式更具可移植性。所以Pattern.compile(\\/”
和Pattern.compile(“/”
的行为都是一样的
顺便说一句,
]
本身不是特殊字符。如果它不是[…]
构造的一部分,您不需要转义它,但您可以转义它(至少在Java中,我不确定其他正则表达式的风格)。正斜杠/
字符在Java模式中不是命令字符(在正常的字符串中也不是),不需要逃跑
反斜杠字符\
需要在Java字符串
s中转义,因为它用于编码特殊序列,如换行符(“\n”
)
例如,字符串单反斜杠=“\\”代码>
由于反斜杠还用于表示JavaPattern
表示中的特殊结构,因此在Pattern
定义中可能需要双转义
例如,patternsingelash=Pattern.compile(“\\\\”)代码>
有关涉及反斜杠的模式
构造的示例,请参见。无需转义斜杠字符。Java正则表达式语法的参考是类的Javadoc。在那里,它列出了所有具有特殊意义的字符。该列表中没有斜杠。我认为人们之所以转义/
字符,是因为它们来自不同的正则表达式风格(如Javascript),您可以在两个斜杠之间定义一个模式,将其包围,如果您想匹配一个斜杠,则需要转义
var pattern = /\d\/\d/; // Valid pattern of 2 digits divided by a slash, which must be escaped.
但是,从Java的角度来看,它是等效的,因此没有必要逃避它。据我所知,它不会有太大的区别。将转义斜杠放在字符前面通常意味着必须将该字符视为文字字符。。。除非它有特殊意义。在文本的情况下,斜杠是可选的,不需要。。。IntelliJ还说这是一个多余的字符转义。可能是@radoh的重复,我不认为这个问题是重复的,因为它还澄清了一个事实,即“\\/”和“/”模式之间没有区别。谢谢
var pattern = /\d\/\d/; // Valid pattern of 2 digits divided by a slash, which must be escaped.