【JavaSE】java和正则表达式,转义字符

前言

我又来了,还是关于转义字符,并不是我对转义字符情有独钟,而是不理解它,我就不好编写正则表达式,因此我呕心沥血,写下这篇文章。
同时也希望这篇文章对大家有所帮助~

 

1.正题

这一次,我仅仅只是想检索字符串中的 . 因此我写了以下代码:
因为 . 在正则表达式中有特殊含义,所以不能单独写成 .

public static void main(String[] args) {
	String content = "abc\"\\(.ad\\\"(ad.fa)\\.daf(";
	/* 3 */ String regex = "\.";
	Pattern pattern = Pattern.compile(regex);
	Matcher matcher = pattern.matcher(content);
	while(matcher.find()){
		System.out.println("找到:"+matcher.group(0));
	}
}

我加了一个 \,理所当然地第3行报错了,因为在java中不能单独出现 \ 符号,所以要写两个 \\
在我之前认为,像 \d,\w,\s这些才要写成两个\\,但是当我想要让 . 表示成普通字符时也要写两个\\

为什么?

终究是我对转义字符的理解不到位啊
 

2.理解

这是因为java中有转义字符,而正则表达式中同样也有

而转义的先后顺序是,先通过java的转义,然后再进行正则中的转义,
如:当我想要检索字符串中的 \ 时,应当如下编写:

public static void main(String[] args) {
	String content = "abc\"\\(.ad\\\"(ad.fa)\\.daf(";
	String regex = "\\\\";
	Pattern pattern = Pattern.compile(regex);
	Matcher matcher = pattern.matcher(content);
	while(matcher.find()){
		System.out.println("找到:"+matcher.group(0));
	}
}

想要让 \ 在java的正则表达式中表示成一个普通字符,应该使用四个 \。
首先进行java的转义,那么前面两个 \ 会转义成正则表达式中的一个 \,后面的两个 \ 也会转义成正则表达式中的一个 \,最后在正则表达式中有两个 \ ,然后再进行正则表达中的转义,成为一个普通字符 \

 

3.最后

即然java中也有转义,正则中也有转义,那么两者有何不同呢?

  • 特殊含义的转义,如下:

    java\b  \t  \n …
    正则\d  \w  \s…

  • 作为普通字符需要转义的字符,如下:
    java"   ’   \
    正则(  )  $   \   ?  [  ]  ^  {  }

其中,字符 \ 是特别的,因为它无论是在java还是正则中,都是表转义的字符。因此,想让它最终在正则中表示成普通字符,需要经过两层转义。
那么这样的话,在正则中就应该有两个 \ ,而在正则中有两个 \ ,那么java中将需要用到四个 \ 。

你可能感兴趣的:(JavaSE,java)