(一)建立
String regex="";//regex匹配
String input="";//input输入
Pattern p= Pattern.compile(regex);//将给定的正则表达式(regex)编译compile()到模式(Pattern)中。 static Pattern compile(String regex)
Matcher m=p.matcher(input);//创建匹配(match)给定输入(input)与此模式的匹配器(Matcher)。 Matcher matcher(CharSequence input)
(二)处理匹配结果
//如果是用regex匹配全部input则使用。尝试将整个区域与模式匹配:boolean matches()
m.matches()
//通常只需要匹配部分input,则使用m.find() 尝试查找与该模式匹配的输入序列的下一个子序列:boolean find([int start])
//抛出:IndexOutOfBoundsException - 如果开始点小于零或大于输入序列的长度。
int tmpStart=0
while(m.find())
{
//...
tmpStart=m.end();//end()返回的是当前与模式匹配的子序列的结尾的位置。
}
(三)关于捕获
regex中()表示需要捕获的群组,匹配后,得到一个数组存放所有的捕获。
返回此匹配器模式中的捕获组数:int groupCount()//捕获是从1开始计算,0始终表示整个regex,所以想返回整个匹配的子序列可以用m.group()。
返回由以前匹配操作所匹配的输入子序列: String group()
for(int i=0;i<=m.groupCount();++i)//i=0表示m.group(0)即整个regex的匹配
{
System.out.print(m.group(i));
System.out.print(" ,starts at pos:"+m.start(i));
System.out.print(" ,ends at pos:"+m.end(i));
System.out.println();
}
(四)替换
1.替换模式与给定替换字符串相匹配的输入序列的每个子序列。String replaceAll(String replacement)
m.replaceAll("#");//input的所有与regex匹配的子序列都被替换成"#";
2.替换模式与给定替换字符串匹配的输入序列的第一个子序列。String replaceFirst(String replacement)
m.replaceFirst("#");//input第一个与regex匹配的子序列被替换成"#";
3.用捕获的内容进行替换
m.replaceFirst("$1");//用第一个捕获的内容替换整个与regex匹配的子序列。
String forMatch="15851844444aasdddd15851866666ddd15851822222ddd15851899999";//ddd15851877777
String regex="1[3458]\\d{4}(\\d)\\1{4}";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(forMatch);
int tmpStart=0;
int cntMatches=0;
while(m.find(tmpStart))
{
tmpStart=m.end();
System.out.println("matches "+(++cntMatches)+" : ");
for(int i=0;i<=m.groupCount();++i)
{
System.out.print("match "+i+" : ");
System.out.print(m.group(i));
System.out.print(" ,starts at pos:"+m.start(i));
System.out.print(" ,ends at pos:"+m.end(i));
System.out.println();
}
System.out.println();
}
|
|