⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regmathertest2.java

📁 Java 正则表达式的用法: 取反字符集 贪婪匹配
💻 JAVA
字号:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import junit.framework.TestCase;

public class RegMatherTest2 extends TestCase {
	/**
	 * 取反字符集
	 * q[^u] 并不意味着:匹配一个q,后面没有u跟着。它意味着:匹配一个q,后面跟着一个不是u的字符。
	 * 所以它不会匹配“Iraq”中的q,而会匹配“Iraq is a country”中的q和一个空格符。
	 * 事实上,空格符是匹配中的一部分,因为它是一个“不是u的字符”。
	 */

	public void testDenial() {
		Pattern p = Pattern.compile("(q[^u])");
		String s = "Iraq is a country.";
		Matcher m = p.matcher(s);
		if (m.find()) {
			assertEquals(m.group(1), "q ");
		}
	}

	/**
	 * 贪婪匹配
	 * <.+> 不会分别匹配 This is a <EM>first</EM> test 中的 <EM> 和 </EM>
	 * 它会匹配 <EM>first</EM>
	 */
	public void testGreedy() {
		Pattern p = Pattern.compile("(<.+>)");
		String s = "This is a <EM>first</EM> test";
		Matcher m = p.matcher(s);
		if (m.find()) {
			assertEquals(m.group(1), "<EM>first</EM>");
		}
		//1. 修订为精确查询,因为不需要回朔,性能最佳
		p = Pattern.compile("(<[^>]+>)");
		m = p.matcher(s);
		if (m.find()) {
			assertEquals(m.group(1), "<EM>");
		}
		//2. 用懒惰性取代贪婪性(用问号?)
		p = Pattern.compile("(<.+?>)");
		m = p.matcher(s);
		if (m.find()) {
			assertEquals(m.group(1), "<EM>");
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -