【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:  … 正则: d w s… 作为普通字符需要转义的字符,如下: java: " ’ 正则:( ) $ ? [ ] ^ { }

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

经验分享 程序员 微信小程序 职场和发展