📄 regmathertest2.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 + -