正则表达式零宽断言

2023-12-18 09:40:30

?<= 不包含左边值

(?<=exp) 也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp
例如:(?<=\bdanc)\w+\b 查找 I’m dancing,它会匹配 ing

?= 不包含右边值

(?=exp) 也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp
例如:\b\w+(?=ing\b) 查找 I’m dancing,它会匹配 danc

例子

/**
 * 	这需要运用零宽断言<br>
 * 	?<=不包含左边值<br>
 * 	?=不包含右边值<br>
 * 	\b 匹配一个字边界,即字与空格间的位置<br>
 *  (?=exp)		也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp 例如:\b\w+(?=ing\b) 	查找 I'm dancing,它会匹配 danc		<br>
 *  (?<=exp)	也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp 例如:(?<=\bdanc)\w+\b 	查找 I'm dancing,它会匹配 ing	<br>
 */
public class RegexUtil {
	/**
	 * 	正则表达式匹配文本内容
	 * @param text	需要查找的内容
	 * @param regex	配置正则表达式
	 * @return	匹配到的内容列表
	 */
	public static List<String> getList(String text, String regex) {
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(text);
		List<String> list = new ArrayList<>();
		while (matcher.find()) {
			String group = matcher.group();
			list.add(group);
		}
		return list;
	}
}

匹配 一个ing结尾的单词

	@Test
	public void test01() {
		String text  = "Pingpong, I'm singing while you're dancing.";
		String regex  = "\\b\\w+(?=ing\\b)ing";
		List<Object> targetList = Arrays.asList(new String[]{"singing", "dancing"});
		Assert.isTrue(RegexUtil.getList(text, regex).equals(targetList), "两个List应该相等");
	}

匹配 一个sing开头的单词

	@Test
	public void test02() {
		String text  = "Pingpong, I'm singing while you're dancing.";
		String regex  = "sing(?<=\\bsing)\\w+\\b";
		List<Object> targetList = Arrays.asList(new String[]{"singing"});
		Assert.isTrue(RegexUtil.getList(text, regex).equals(targetList), "两个List应该相等");
	}

匹配 ()里面的内容

	@Test
	// 匹配 ()里面的内容
	public void test03() {
		String text  = "北京市(海定区)(朝阳区)(西城区)";
		String regex  = "(?<=\\().*?(?=\\))";
		List<Object> targetList = Arrays.asList(new String[]{"海定区", "朝阳区", "西城区"});
		Assert.isTrue(RegexUtil.getList(text, regex).equals(targetList), "两个List应该相等");
	}

匹配 里面的内容

	@Test
	public void test04() {
		String text  = "<string>小帅</string>";
		String regex  = "(?<=\\<string\\>).*?(?=\\</string\\>)";
		List<Object> targetList = Arrays.asList(new String[]{"小帅"});
		Assert.isTrue(RegexUtil.getList(text, regex).equals(targetList), "两个List应该相等");
	}

文章来源:https://blog.csdn.net/qq_26264237/article/details/135002222
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。