1.【单个】描述某一个字符
x:表示由x所组成;
\:匹配“\”;
\t:描述的是制表符;
\n:表示换行;
2、【单个】描述一个范围:
[abc]:表示可能是字母a、b、c中的任意一个;
3、【单个】简化表达式:
“.”:表示任意的一位字符;
\d: 等价于“[0-9]”表示任意一位的数字;
\D:等价于“[^0-9]”表示任意的非数字;
\s :表示是一个空格,可能是空格、\t、\n;
\S:表示不是一空格;
\w:等价于"[a-zA-Z0-9]",表示字母、数字、下划线组成
\W:等价于"[^a-zA-Z0-9]",表示不是 字母、数字、下划线组成
4、边界匹配(Java用不到)
^:表示正则的开始;
$:表示正则的结束;
5、数量表达式
正则?:表示该匹配出现 0次或1次;
正则+:表示该匹配出现1次或多次;
正则*:表示该匹配出现0次、1次或多次
正则{n}:表示该匹配出现正好n次;
正则{n,}:表示该匹配出现n次以上;
正则{n,m}:表示该匹配出现n~m次;
6、逻辑匹配
正则A正则B:就表示与的关系在第一个匹配之后立即匹配第二个
正则A|正则B:表示A或B正则出现一次;
(正则):按照一组正则进行处理。
**
二、String类对正则的支持
**
public class TestString {
public static void main(String[] args) throws Exception {
String str = "ajjk57513qedad45a7fa45q74%^&&*&%#$ hqjkhjs jkjk";
String regex = "[^a-zA-Z]"; // 正则,不是字母
// 按照正则表达式替换所有
String s1 = str.replaceAll(regex, "");// 把不是字母的替换成空
System.out.println(s1);
String str2 = "a24a54w724575e87545e44e5e5s";
String regex2 = "\\d+"; // 正则[0-9]
// 按照正则表达式进行拆分
String[] result = str2.split(regex2);
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
System.out.println("-------------------------");
// 验证是否为整数或小数,如果是装换为double类型
String str3 = "1125.235";
String regex3 = "\\d+(\\.\\d+)?";// 小数点前的数字出现一次以上,小数点后的数字可以不出现,可以出现
if (str3.matches(regex3)) {
double d = Double.parseDouble(str3);
System.out.println(d);
}
//验证字符串是否为时间,如果是转换为Date类型
String str4 = "2019-06-22";
String regex4 = "\\d{4}-\\d{2}-\\d{2}";
String str5 = "2026-06-26 10:10:16";
String regex5 = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}";
if (str4.matches(regex4)) {
System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str4));
}
if (str5.matches(regex5)) {
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(str5));
}
//判断是否为电话号码
//5687445 \\d{7,8}
//0105687445 ((\\d{3}))?\\d{7,8}
//(010)-5687445 ((\\((\\d{3})\\)-)|(\\d{3}))?\\d{7,8}
String num1="5687445";
String num2="0105687445";
String num3="(010)-5687445";
String regex6="((\\((\\d{3})\\)-)|(\\d{3}))?\\d{7,8}";
System.out.println(num1.matches(regex6));
System.out.println(num2.matches(regex6));
System.out.println(num3.matches(regex6));
//验证邮箱地址
String emil="z_zhuo@outlook.com";
String regex7="[a-zA-Z][a-zA-Z_\\.0-9]{5,9}@[a-zA-Z_\\.0-9]{1,9}\\.(cn|com|net)";
System.out.println(emil.matches(regex7));
}
}
**
三、Pattern类与Matcher类
**
public class TestPattern {
public static void main(String[] args) {
String str="a|b|c";
String regex="\\|";
Pattern pat=Pattern.compile(regex);
String [] result=pat.split(str);
for(String s:result){
System.out.println(s);
}
}
}
public class TestMatcher {
public static void main(String[] args) {
String str="INSERT INTO member(mid,name,age) VALUES "
+ "(#{member.mid},#{member.name},#{member.age})";
String regex="#\\{[a-zA-Z_0-9\\.]+\\}"; //分组的正则表达式
Pattern pat=Pattern.compile(regex);
Matcher mat=pat.matcher(str);
while(mat.find()){ //依次进行比较,如果符合则取出内容
System.out.println(mat.group(0));
}
}
}
运行截图: