研究了一下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