Java与正则表达式
示例,使用正则表达式检测电话号格式
String pn="15010123456"
boolean b=pn.mayches("[0-9]{11}");//简单版本,检测一个11位全是数字的字符串序列
Java正则表达式API
//需要导入这些
import java.util.regex.Matcher
import java.util.regex.Pattern
//在类的函数中
void checkPhoneNumber()
{
String pn="15010123456";
//Pattern(模式)
Pattern p=Pattern.compile("[0-9]{11}");//编译正则表达式
//Matcher(匹配器)
Matcher m=p.matcher(pn);//使用匹配器
boolean b=m.matches();
}
//还有像这样的函数
String str="abjavacd";//需要查看是否匹配的字符串
String reg="..java..";//正则表达式
Pattern.matches(reg,str);
此外还有spilt()分割,find()查找,replaceAll()替换,可以在后面的实例查看。
正则表达式语法
^java 条件限制为以java为开头字符
java$ 条件限制为以java为结尾字符
java. .表示除/n以外的任意一个单独字符,所以java.表示java后除换行外的任意一个字符
[358]条件限制在358中的一个数字
[a-z] 条件限制在a到z的一个字符
[a-zA-Z]条件限制在小写a-z或者大写A-Z中的一个字符
[0-9]条件限制为数字0-9
[0-9[a-z]]条件限制在0-9或者a-z中的一个字符(交集)
如果在[]中加^表示要不满足[]中的情况
如
[^0-9] 条件限制在非0-9的任意一个字符
.*表示0个以上的任意字符
J*表示出现0个以上的*
J+表示出现1个以上的J
J?表示J可能出现也可能不出现
J{2} 表示J出现两次
J{2,6}表示J出现2到6次
J{2,}表示J出现2次以上
Java|Hello 表示要么出现Java要么出现Hello
此外可以使用转义字符
正则表达式实例
分割一个字符串
String str="Hello,world hello:world";
String reg="[,;]";
Pattern p=Pattern.compile(reg);
//调用了spilt方法进行分隔,分隔符是,或者是;
String[] a=p.spilt(str);
for(String s:a){
System.out.println(s);
}
替换一个字符串
String[] names={"张一三","王一五","小一军"};
String reg="(.).(.)";//()代表一个组,此处有两个组
Pattern p=Pattern.compile(reg);
for(String name:names){
Matcher m=p.matcher(name);
String s=m.replaceAll("$1*$2");//因为分了组,所以$1和$2还是表示组中原本的内容,所以输出的结果是张*三,王*五,小*军
}
查找一个字符串
String str="how are test you ni hao ma";
String reg="\\b[a-z]{3}\\b";//这里\\b限制了单词的边界,不然test中的tes也会被匹配到,但是它不是一个完整的单词
Pattern p=Pattern.compile(reg);
Matcher m=p.matcher(str);
while(m.find()){
System.out.println(m.group());
System.out.println(m.start()+":"+m.end());//这里还输出了匹配到的单词的起始位置和终止位置
}
输出结果
how
0:3
are
4:7
you
13:16
hao
20:23