==================项目应用==================
提取纯文本:
Pattern stripTagPattern = Pattern.compile("(?:<head>[\s\S]*?</head>)|(?:<script[^>]*>[\s\S]*?</script>)|(?:<style[^>]*>[\s\S]*?</style>)|(?:<!--[^-]*-->)|(?:<[^>]*?>)", Pattern.CASE_INSENSITIVE);
提取网页链接:
Pattern linkPattern = Pattern.compile("(?:href|src|url)\s*=\s*['"]?([^'">]+)?(['"]?[>\s]{1})", Pattern.CASE_INSENSITIVE);
package trybase;
//该例将把句子里的"Kelvin"改为"Kevin"
import java.util.regex.*;
public class TryRegExp{
/**
* @param args
* @throws Exception
*/
/**
* @param args
* @throws Exception
*/
public static void main(String[] args)
throws Exception {
tryAppendReplacement();
}
/**
* Matcher.appendReplacement()完成以下两件事
*一是Append the intervening text,即把上次成功匹配的末位置到本次成功匹配的起始位置间的字符加到StringBuffer中
*sb.append(getSubSequence(lastAppendPosition, first));
* 二是 Append the match substitution,即把本次成功匹配的字符加以替换,并将结果追加到StringBuffer中
*Matcher.appendTail()将余下的字符串拷贝到StringBuffer中。
*sb.append(result.toString());
*/
public static void tryAppendReplacement() {
//替换掉一个字符串里的某一个子字符串。[Matcher.appendReplacement(StringBuffer, String) & Matcher.appendTail()]
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());
}
/**
* Matcher.groupCount()返回正则式中的小组的个数,即有多少对括号。每个括号为一个group,它们编号从1开始。
正则式成功匹配后,通过Matcher.group(i)返回第i个小组所匹配的内容。Matcher.group(0)与Matcher.group()等价。
Matcher.start()返回本次成功匹配的起始位置,Matcher.end()返回下次匹配的起始位置,即本次匹配的最后一个元素的下一个元素所在位置。
*/
public static void tryGroupCount() {
//有关groupCount()。[matcher.groupCount() & matcher.group(int) & Matcher.start() & Matcher.end()]
String src = "sss#this#xx#that#df#";
Pattern pattern = Pattern.compile("(\w+)#(\w+)#");
Matcher matcher = pattern.matcher(src);
System.out.println("matcher.groupCount():" + matcher.groupCount());
while (matcher.find()) {
System.out.println("$matcher: " + matcher.group() + "--" + matcher.start()+"--"+matcher.end());
System.out.println("group1: " + matcher.group(1));
System.out.println("group2: " + matcher.group(2));
}
}
/**
* 说明:
Pattern.split()是以pattern模式为标准,找出符合条件的子串作为分隔符,将字符串余下的部分分成几份,得其它的部分。Pattern.find()则是以pattern模式为标准,找出符合条件的子串。
find()找的是符合条件的下一个子串,所以每次找完后都会改变用于find()查找的起始指针的指向。
*/
public static void tryMatcher() {
//使用Matcher类实现上边split的功能。[Matcher.find() & Matcher.group()]
String str = "aa155ere4547ere878";
Pattern pattern = Pattern.compile("\D+");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.print(matcher.group()+ "--");
}
}
/**
*
*/
public static void treSplit() {
//拆分字符串&表达式替换[String.split()&Matcher.replaceAll()]
Pattern pat = Pattern.compile("\d+");
String str = "aa155ere4547ere878";
//String str = "boo:and:2foo";
String s[] = pat.split(str);//以数字作为分隔,将客串拆成几个子串
Matcher m = pat.matcher(str);
String s2 = m.replaceAll("000");//把匹配的pat替换成000
for(int i=0; i<s.length; i++)
{
System.out.print(s[i] + "--");
}
System.out.println();
System.out.println(s2);
}
public static void tryFind() {
// 生成 Pattern 对象并且编译一个简单的正则表达式"Kelvin"
Pattern p = Pattern.compile("Kelvin");
// 用 Pattern 类的 matcher() 方法生成一个 Matcher 对象
Matcher m = p.matcher("Kelvin Li and Kelvin Chan are both working in " +
"Kelvin Chen's KelvinSoftShop company");
// StringBuffer sb = new StringBuffer();
int i=0;
// 使用 find() 方法查找第一个匹配的对象
boolean result = m.find();
// 使用循环将句子里所有的 kelvin 找出并替换再将内容加到 sb 里
while(result) {
StringBuffer sb = new StringBuffer();
i++;
m.appendReplacement(sb, "Kevin");
System.out.println("第"+i+"次匹配后 sb 的内容是:"+sb);
// 继续查找下一个匹配对象
result = m.find();
}
StringBuffer sb = new StringBuffer();
// 最后调用 appendTail() 方法将最后一次匹配后的剩余字符串加到 sb 里;
m.appendTail(sb);
System.out.println("调用 m.appendTail(sb) 后 sb 的最终内容是 :"+
sb.toString());
}}