您的位置:首页 > 其它

整理正则表达式

2011-08-03 10:18 316 查看
引言:基本不怎么使用正则表达式,以至于每次使用时都忘记各符号含义及用法,所以记录下,供快速参考用。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

public static void p(Object o){
System.out.println(o);
}

public static void main(String[] args) {

/**
* 简单认识正则表达式
*/
p("abc".matches("..."));
p("a8729a".replaceAll("\\d", "-"));
Pattern p = Pattern.compile("[a-z]{3}");//创建一个编辑好的模式
Matcher m = p.matcher("fgh");//用模式匹配去字符串,匹配后的结果保存在匹配器里
p(m.matches());//true

p("fgh".matches("[a-z]{3}"));//更方便写法,用字符串的matches()方法直接去匹配正则.由于使用时临时编译,所以速度慢

/**
* 认识. * + ?
*
* .代表一个任意字符
* *代表0个或多个字符
* +代表1个或多个字符
* ?代表0个或1个字符
*/
p("a".matches("."));//true
p("aa".matches("aa"));//true
p("aaaa".matches("a*"));//true
p("aaaa".matches("a+"));//true
p("".matches("a*"));//true
p("aaaa".matches("a?"));//false
p("".matches("a?"));//true
p("a".matches("a?"));//true
p("4354654545".matches("\\d{3,100}"));//true
p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));//false
p("192".matches("[0-2][0-9][0-9]"));//true

/**
* 范围
*
* []用来匹配一个字符
* ^放[]里代表取反,放[]外代表以某字符开头
*/
p("a".matches("[abc]"));//true
p("a".matches("[^abc]"));//false
p("A".matches("[a-zA-Z]"));//true
p("A".matches("[a-z]|[A-Z]"));//true
p("A".matches("[a-z[A-Z]]"));//true
p("R".matches("[A-Z&&[RFG]]"));//true

/**
* 认识\s \w \d \
*
* \s代表任意空白字符
* \w代表任意英文符号 包括数字、字母、下划线
* \d代表任意数字
*/
p(" \n\r\t".matches("\\s{4}"));//true
p(" ".matches("\\S"));//false
p("a_8".matches("\\w{3}"));//true
p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));//true
p("\\".matches("\\\\"));//true

/**
* 边界^ $ \b
*
* ^在[]外代表以某字符串开头
* $代表以某字符串结尾
* \b代表单词边界
*/
p("hello sir".matches("^h.*"));//true
p("hello sir".matches(".*ir{1}quot;));//true
p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));//true
p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));//false
//whilte lines
p(" \n".matches("^[\\s&&[^\\n]]*\\n{1}quot;));//true 0个或多个"空白字符并且非换行符"开头,换行符结束

p("aaa 8888c".matches(".*\\d{4}."));//true
p("aaa 8888c".matches(".*\\b\\d{4}."));//true
p("aaa8888c".matches(".*\\d{4}."));//true
p("aaa8888c".matches(".*\\b\\d{4}."));//false

//Email
p("java_ztx@126.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));

/**
* matches find lookingAt
* find依次往下查找是否匹配
* lookingAt每次都从头查找是否匹配
*/
Pattern p = Pattern.compile("\\d{3,5}");
String s = "123-34345-234-00";
Matcher m = p.matcher(s);
p(m.matches());
m.reset();

p(m.find());//true
p(m.start()+"-"+m.end());
p(m.find());//true
p(m.start()+"-"+m.end());
p(m.find());//true
p(m.start()+"-"+m.end());
p(m.find());//false
//p(m.start()+"-"+m.end());

p(m.lookingAt());//true
p(m.lookingAt());//true
p(m.lookingAt());//true
p(m.lookingAt());//true

/**
* 替换
*/
Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afdafgeerdg");
p(m.replaceAll("JAVA"));
m.reset();
StringBuffer sb = new StringBuffer();
int i = 0;//奇、偶控制
while (m.find()) {
i++;
if(i%2 == 0){//偶
m.appendReplacement(sb,"java");
} else {//奇
m.appendReplacement(sb, "JAVA");
}
}
m.appendTail(sb);//添加尾巴
p(sb);//JAVA java JAVA java IloveJAVA you hatejava afdafgeerdg

/**
* 组
* 一个()代表一个组
* group()打印匹配的字符串
*/
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
String s = "123aa-34345bb-234cc-00";
Matcher m = p.matcher(s);
while (m.find()) {
p(m.group(1));//打印匹配的123aa字符串里的第一组,即123
}

}

}


做个练习:某网页另存为保存到本地磁盘后,抠出里面所有的Email

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailSpider {

public static void main(String[] args){
try {
BufferedReader br = new BufferedReader(new FileReader("D:\\test.html"));
String line = "";
while ((line = br.readLine()) != null) {
parse(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
}

public static void parse(String line){
Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
Matcher m = p.matcher(line);
while (m.find()) {
System.out.println(m.group());
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: