1.下面是jdk API中的原话:根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。例如,当解释为正则表达式时,字符串字面值 "\b" 与单个退格字符匹配,而 "\\b" 与单词边界匹配。字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\\(hello\\)"。 这段话怎么理解?
2.这是thinking中的一段话:如果在其他语言中使用过正则表达式,那你就立刻能发现Java对反斜线\的不同处理.在其他语言中,\\表示"我想要在正则表达式中插入一个普通的(字面上的)反斜线,请不要给他任何特殊的意义."而在Java中,\\的意思是"我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义."例如,如果你想表示一位数字,那么正则表达式应该是\\d.如果你想插入一个普通的反斜线,则应该这样用\\\\.不过换行和制表符之类的东西只需使用单反斜线:\n\t. 怎么理解?
3.看一下代码:
class Demo
{
public static void main(String[] args)
{
System.out.println("a\\b".replaceAll("\","A"));//①
System.out.println("a\\b".replaceAll("\\","A"));//②
System.out.println("a\\b".replaceAll("\\\","A"));//③
System.out.println("a\\\\b".replaceAll("\\\\","A"));//④
System.out.println("a\\\\\\b".replaceAll("\\\\","A"));//⑤
}
}
上面①到③为啥编译或者运行失败?④⑤却运行成功?求解释。
4.字符串中的\是转移字符,那么在正则表达式中的\\和\\\\又该怎么理解呢?
关于java中正则表达式\\和\\\\的理解?请各位高手帮忙分析下。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- little_how 2016-05-21 12:19关注
1.java的转意字符为\,拥有字符转意的是\ " b t n r等;
2.replaceAll调用的是模式,所以为用正则的模式来做替换;
3.正则里面又有转意的元字符,如\S表示非空格,\s表示空格, \w \d等各自的一些表示。以上3点结合起来就是,想要\在java中存在,那么必须要转意 如\b在java属于转意,那么在正则的时候拿到的模式就是转意后的,
所以想要正则的模式拿到目标的,那么需要对\进行转意,那么转意后的\在java中就不会对\b继续进行转意,那么该模式就为正则
模式串了。不理解的可以继续提问。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报