正则零宽度断言

本文介绍了正则表达式中的零宽度断言,包括?=exp(匹配以exp结尾)、?<=exp(匹配以exp开头)、?!exp(匹配不以exp结尾)和?<!exp(匹配不以exp开头)四种类型,并通过实例展示了它们在字符串匹配中的应用。通过这些断言,可以更精确地定位和提取所需内容。
摘要由CSDN通过智能技术生成

前提

今天做正则的时候看到这个?!比较迷惑,印象中正则好像这有感叹号,于是查了下资料,发现还是自己的知识太过于单薄了,于是打算记录一下。吐槽一下,这个术语实在有些绕口和难懂,也不知道是谁想出来的。定义就不说了,实在难懂,一般有四种零宽度断言。

  1. ?=exp (匹配以exp表达式结尾)
  2. ?<=exp (匹配以exp表达式开头)
  3. ?!exp (匹配不以exp表达式结尾)
  4. ?<!exp (匹配不以exp表达式开头)

ex1: ?=exp

//匹配danc前面的字符串
final String regex = "(.+)(?=danc)";
final String str = "I'm singing while you're dancing";
System.out.println(str.matches(regex));
Matcher matcher = Pattern.compile(regex).matcher(str);
while(matcher.find()) {
	System.out.println(matcher.group());
}

在这里插入图片描述

ex2: ?<=exp

//匹配danc后面的字符串
final String regex = "(?<=danc)(.+)";
final String str = "I'm singing while you're dancing";
System.out.println(str.matches(regex));
Matcher matcher = Pattern.compile(regex).matcher(str);
while(matcher.find()) {
	System.out.println(matcher.group());
}

在这里插入图片描述

ex3: ?!exp

//匹配后面不带空格的字符串
final String regex = "([\\w\\']+)(?!\\s+)";
final String str = "I'm singing while you're dancing";
System.out.println(str.matches(regex));
Matcher matcher = Pattern.compile(regex).matcher(str);
while(matcher.find()) {
	System.out.println(matcher.group());
}

在这里插入图片描述

ex4: ?<!exp

//匹配不以空格开头的字符串
final String regex = "(?<!\\s)([\\w\\']+)";
final String str = "I'm singing while you're dancing";
System.out.println(str.matches(regex));
Matcher matcher = Pattern.compile(regex).matcher(str);
while(matcher.find()) {
	System.out.println(matcher.group());
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值