我又来了,还是关于转义字符,并不是我对转义字符情有独钟,而是不理解它,我就不好编写正则表达式,因此我呕心沥血,写下这篇文章。
同时也希望这篇文章对大家有所帮助~
这一次,我仅仅只是想检索字符串中的 . 因此我写了以下代码:
因为 . 在正则表达式中有特殊含义,所以不能单独写成 .
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));
}
}
我加了一个 ,理所当然地第3行报错了,因为在java中不能单独出现 符号,所以要写两个 \
在我之前认为,像 d,w,s这些才要写成两个\,但是当我想要让 . 表示成普通字符时也要写两个\
为什么?
终究是我对转义字符的理解不到位啊
这是因为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中将需要用到四个 。



