【干货】在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"
相关文章推荐
- js中使用正则表达式(五)特殊字符、匹配模式、捕获组与反向引用介绍
- java中使用正则表达式匹配特殊字符串
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- Java 使用正则表达式过滤字符串中的特殊字符
- 使用“正则表达式”,匹配任意一个字符(中文,英文和标点或特殊字符)
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 使用ICU库中的正则表达式匹配关键字之间含有特殊字符的关键字示例
- java中使用正则表达式匹配特殊字符串\$natureOrder.*\)
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- java正则表达式,大写字母、小写字母、特殊字符、数字 两种两种以上组合匹配
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符