您的位置:首页 > 编程语言 > Java开发

【干货】在java语言和scala语言中,在正则表达式中,我们习惯使用反斜杠("\")使使后面的字符具有特殊的意义,但你有没有思考过正斜杠(“/”)是否也代表某种匹配模式?

2020-01-13 07:46 375 查看

一首先了解java/scala语言在正则表达式上的特殊性

1不同语言正则表达式语法的异同

①在其他语言中:
\(双反斜杠) 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。

②在 Java /scala中:
\(双反斜杠) 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。例如,当解释为正则表达式时,字符串字面值 “\b” 与单个退格字符匹配,而 “\b” 与单词边界匹配。字符串字面值 “(hello)” 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 “\(hello\)”。

③小结
所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java /scala中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java/scala 的正则表达式中,两个 \ 代表其他语言中的一个 \,这也就是为什么表示一位数字的正则表达式是 \d,而表示一个普通的反斜杠是 \\

二java/scala反斜杠(\)后面常用转义字符

\:

将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n"匹配字符"n”。"\n"匹配换行符。序列"\\“匹配”\","\(“匹配”("。

\b:

匹配一个字边界,即字与空格间的位置。例如,“er\b"匹配"never"中的"er”,但不匹配"verb"中的"er"

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: