【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中将需要用到四个 \ 。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

り澄忆秋、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值