java 正则表达式
在java.util.regex包里面定义了两个主要的类:
·Pattern类:此类对象如果要想使用必须使用compile()方法,方法的功能是编译正则
public static Pattern compile(String regex);
·Matcher类:通过Pattern类取得
public Matcher matcher(CharSequence input);
String stb = “heiaiwedhfa4ae6df54asfdaewadfes”;
Pattern compile = Pattern.compile("[e]");//Pattern类通过static方法拿到Pattern类的对象
Matcher m = compile.matcher(stb);//Matcher通过Pattern的方法matcher(CharSequence input)拿到Matcher类的对象
while(m.find()) {//Matcher类对象通过find()方法得到取得的结果
System.out.println(m.group());Matcher类对象通过group()方法输出结果
}
3.2、正则标记
1、单个字符(数量:1)
·字符:表示由一个字符组成
·\:表示转义字符“\”
·\t:表示一个“\t”符号
·\n:表示匹配换行(\n)
2、字符集(数量:1)
·[abc]:表示可能是字符a、b、c中的任意一位字符
·[^abc]:表示不是a、b、c中的任意一位字符
·[a-z]:表示所有的小写字母
·[a-z A-Z]:表示任意的一位字母,不区分大小写
·[0-9]:表示任意一位数字
3、简化的字符集表达式(数量:1)
·.:表示任意的一位字符
·\d:等价于[0-9]
·\D:等价于[^0-9]
·\s:表示任意的一位空白字符例如:“\t”、“\n”
·\S:表示任意的一位非空白字符
·\w:等价于[a-z A-Z _ 0-9],表示由任意的字母数字_所组成
·\W: 等价于[^a-z A-Z _ 0-9],表示不是由任意的字母数字_所组成
4、边界匹配(在java script中使用)
^:正则的开始
$:正则的结束
5、数量表达式
正则?:表示此正则可以出现0或1次
正则+:表示此正则可以出现1次或多次
正则*:表示此正则可以出现0、1次或多次
正则{n}:表示次正则正好出现n次
正则{n,}:表示次正则正好出现n次或n次以上
正则{n,m}:表示此正则出现n~m次
6、逻辑运算
正则1正则2:正则1判断完成之后继续判断正则2
正则1|正则2:正则1或正则2有一组满足即可
(正则):将多个正则作为一组,可以为这一组单独设置出现的次数
3.3、String类对正则的支持
在jdk1.4之后,由于正则的引入,所以String类里面也相应的增加了新的操作方法支持
public boolean matches(String regex):正则验证,使用指定的字符串判断其是否符合给出的的正则表达式结构
public String replaceAll(String regex, String replacement):全部替换
public String replaceFirst(String regex, String replacement):替换首个
public String[] split(String regex):全部拆分
public String[] split(String regex, int limit):部分拆分
范例:实现字符串替换
public class TestDemo {
public static void main(String[] args) {
String str = “weldsafk*)()*asdlkfjao#$afdklja” ;
String regex ="[^a-z]";
System.out.println(str.replaceAll(regex,""));
}
}
范例:字符串拆分
public class TestDemo {
public static void main(String[] args) {
String str = “lak8dfja5644asdf99ja” ;
String regex ="\d+";
String result [] = str.split(regex);
for(int x = 0 ;x < result.length ;x ++) {
System.out.println(result[x]);
}
}
}
所有正则之中最应该兴奋的事情是因为可以使用它进行验证
范例:验证一个字符串是否是数字,如果是将其变为double型
public class TestDemo {
public static void main(String[] args) {
String str = “10.2” ;
String regex ="\d+(\.\d+)?";
System.out.println(str.matches(regex));
if(str.matches(regex)) {
System.out.println(Double.parseDouble(str));
}
}
}
范例:判断给定的字符串是否是IP地址(IPV4)
public class TestDemo {
public static void main(String[] args) throws Exception{
String str = “192.168.1.1” ;
String regex ="(\d{1,3}\.){3}\d{1,3}";
System.out.println(str.matches(regex));
}
}
范例:给定一个字符串判断是否是日期格式,如果是则将其转换为Data型数据
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDemo {
public static void main(String[] args) throws Exception{
String str = “2009-03-23” ;
String regex ="\d{4}-\d{2}-\d{2}";
System.out.println(str.matches(regex));
if(str.matches(regex)) {
Date data = new SimpleDateFormat(“yyyy-MM-dd”).parse(str);
System.out.println(data);
}
}
}
范例:判断电话号码,一般要编写电话号码一下几种格式都是满足的:
·格式一:51283346
·格式二:010-51283346
·格式三:(010)-51283346
public class TestDemo {
public static void main(String[] args) throws Exception{
String str = “51283346” ;
String regex ="((\d{3,4}-)|(\(\d{3,4}\))-)?\d{7,8}";
System.out.println(str.matches(regex));
}
}
范例:验证email地址
·要求格式一:email由字母、数字、所组成
·要求格式二:用户名要求由字母、数字、、.组成,其中必须以字母开头和结尾,用户名长度不超过30最后的根域名只能是.com、.cn、.net、.com.cn、.net.cn、.edu、.gov、.org
public class TestDemo {
public static void main(String[] args) throws Exception{
String str = “hello_123@mldn.cn” ;
String regex ="[a-zA-Z][a-zA-Z0-9_\.]{0,28}@\w+\.(net|cn|com|\.cn|net\.cn|org|gov|edu)";
System.out.println(str.matches(regex));
}
}
范例:验证汉字
public class TestDemo {
public static void main(String[] args) throws Exception{
String sta = “你好”;
String reg = “.+”;
System.out.println(sta.matches(reg));
}
}