利用正则表达式可以方便的帮助用户进行数据的验证、拆分、替换等功能.
如果要想正确的驱动正则的操作,那么主要依靠String 类之中的方法:
① . · 验证正则 : 字符串是否匹配给定的正则表达式。
public boolean matches(String regex)
② . · 替换 : 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
public String replaceAll(String regex,String replacement)
③ . · 字符串拆分 : 根据给定正则表达式的匹配拆分此字符串。
public String[] split(String regex)
正则表达式 :
如果要想表示数字可以使用“\d”的标记,同时也可以写成“[0-9]”
预定义字符类 | |
---|---|
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
· [^abc]:表示不是a、b、c 中的一个;
· [a-zA-Z]:表示所有的字母,包括大小写;
· [^a-zA-Z]:表示所有的非字母
· ?:表示正则出现0 次、1 次;
· *:表示正则出现0 次、1 次、多次;
· +:表示正则出现1 次或多次;
· {n}:表示正则出现正好n 次;
· {n,}:表示正则出现n 次以上;
· {n,m}:表示正则出现n~m 次。
范例:现在用户名要求由字母、数字、_所组成,并且长度在6~15 位之间。
public class TestDemo {
public static void main(String[] args) {
String str = "hello123";
String regex = "\\w{6,15}"; // [a-zA-Z0-9_]{6,15}
System.out.println(str.matches(regex));
}
}
对于本程序正则的编写原则:
· 设置字符的取值范围:[a-zA-Z0-9_];
· 设置固定的长度比较可以使用“{}”;
· 正则之中提供了简化的符号:\w
范例:验证电话号码
现在有以下几种电话号码格式:
· 51283346
· 010-51283346
那么要求编写一个正则可以同时满足以上两种电话格式的要求。
public class TestDemo {
public static void main(String[] args) {
String str = "010-51283346";
String regex = "(\\d{3,4}-)?\\d{7,8}";
System.out.println(str.matches(regex));
}
}
· 对电话号码而言,只要是7 位或8 位都可以; \\d{7,8}
· 区号和号码中的-应该同时出现,如果要将多个正则设置为一组,那么使用“()”表示。
范例:验证email 地址
一般而言,email 地址的组成:
· 用户名为字母、数字、.
· 域名为字母、数字、-、_所组成;
· 后缀必须是:.com、.cn、.com.cn、.net、org、edu。
· 字母、数字、.的组合没有现成的简化符号:[a-zA-Z0-9\\.]+
· @标记应该原样输出;
· 域名为字母、数字、-、_所组成:[a-zA-Z0-9\\-_]+
· 后缀必须是:.com、.cn、.com.cn、.net、org、edu
public class TestDemo {
public static void main(String[] args) {
String str = "lxh.hello@yootk-hello.com";
String regex = "[a-zA-Z0-9\\.]+@[a-zA-Z0-9\\-_]+\\.(com|net|com\\.cn|org|edu";
System.out.println(str.matches(regex));
}
}