研究了一下javaAPI文档,在此对正则的使用做些总结说明。
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Demo { public static void main(String[] args) { Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); if(m.matches()) { System.out.println(m.group()); } } } 这段代码实现的功能是:用编好的正则模式来匹配给定的目标字符串,如果检测匹配成功就返回在目标字符串中匹配的字符序列。用到的方法有:
pattern类中的compile方法、matcher方法以及matches方法
static Pattern compile(String regex) 将给定的正则表达式编译到模式中。 Matcher matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器。 static boolean matches(String regex, CharSequence input) 编译给定正则表达式并尝试将给定输入与其匹配。matcher类中的group方法
String group() 返回由以前匹配所匹配的输入子序列。 所以上面的这段代码运行结果为: aaaaab import java.util.regex.Matcher; import java.util.regex.Pattern; public class Demo { public static void main(String[] args) { Pattern p = Pattern.compile("\\d{3,5}"); Matcher m = p.matcher("123-23245-21-456544849846"); if(m.find()) { System.out.println(m.group()+"\t"+m.start()+"-"+m.end()); } if(m.find()) { System.out.println(m.group()+"\t"+m.start()+"-"+m.end()); } if(m.find()) { System.out.println(m.group()+"\t"+m.start()+"-"+m.end()); } if(m.find()) { System.out.println(m.group()+"\t"+m.start()+"-"+m.end()); } m.reset(); if(m.find()) { System.out.println(m.group()+"\t"+m.start()+"-"+m.end()); } } } 这里又用到的方法有:matcher类中的find方法、reset方法、start方法和end方法
boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。 Matcher reset() 重置匹配器。 int start() 返回以前匹配的初始索引。 int end() 返回最后匹配字符之后的偏移量。 这个程序的运行结果为: 123 0-3 23245 4-9 45654 13-18 48498 18-23 123 0-3注意:通过上述例子可以看到,每次使用find()方法匹配时都会将原字符串进行截取操作,也就是原字符串长度减小。
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Demo { public static void main(String[] args) { String str="123-23245-21-4565448"; Pattern p = Pattern.compile("((\\d*)-)*\\d*"); Matcher m = p.matcher(str); System.out.println(m.matches()); String[] strs=str.split("-"); for(int i=0;i<strs.length;i++) { System.out.println(strs[i]); } } } 这里用到了spilt方法来按指定正则分割匹配字符串。 String[] split(CharSequence input) 围绕此模式的匹配拆分给定输入序列。 这个程序的运行结果如下: true 123 23245 21 4565448