正则表达式 及其 相关方法
一、概述
正则表达式(regular expression) 描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
常用的正则表达式如下:
元字符 | 功能说明 |
---|---|
. | 匹配除换行符意外的任意单个字符 |
* | 匹配位于*之前的字符或子模式0次或多次出现 |
+ | 匹配位于+之前的字符或子模式1次或多次出现 |
- | 在[]之内用来表示范围 |
| | 匹配位于|之前或之后的字符 |
^ | 匹配以^后面的字符或模式开头的字符串 |
$ | 匹配以$前面的字符或模式结束的字符串 |
? | 匹配位于“?”之前的0个或1个字符或字模式 |
\ | 表示位于\之后的转义字符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个(水平)制表符 |
\v | 匹配一个垂直制表符 |
\d | 匹配任何数字,相当于[0-9] |
\s | 匹配任何空白字符,包括空格、制表符、换页符,等效于[\f\n\r\t\v] |
\w | 匹配字母、数字、下划线,等效于[a-zA-Z0-9_] |
\W | 与\w相反,等效于[^a-zA-Z0-9_] |
() | 将()中内容作为一个整体来看待 |
{} | 按{}中指定的次数进行匹配,例如,{3,8}表示前面的字符或模式至少重复3次而最多重复8次 |
[] | 匹配位于[]中的任意一个字符 |
[^abc] | []中加^表示反向字符集,本例中匹配除a、b、c之外任何字符 |
[a-z] | []中加-表示给定范围,本例中匹配所有小写字母 |
二、String类 相关方法
matches(String regex)
-
matches方法主要用于匹配验证字符串,在验证中十分应用十分广泛。
-
调用它可得到一个boolean类型的返回值。
-
需传入参数是作为匹配规则的正则表达式。
-
matches 的用法如下:
//定义匹配模式--正则表达式
String pattern = "\\w"; //字母、数字、下划线
//创建字符串
String str = "1";
//matches方法会返回一个boolean值
boolean matches = str.matches(pattern);
//打印结果
System.out.println(matches);
replaceAll
-
replaceAll 方法用于对字符串中同种类型的字符进行批量替换操作。
-
第一个参数为正则表达式,第二个字符为替换后字符。
-
replaceAll 的用法如下:
//定义匹配模式--正则表达式
String pattern = "\\w"; //字母、数字、下划线
//创建字符串
String str = "1uhhkh&*(^%)";
//replaceAll方法会返回一个新的String字符串,并不会修改原字符串
String result = str.replaceAll(pattern,"*");
//打印结果
System.out.println("替换前:" + str);
System.out.println("替换后:" + result);
split
- split 方法 以某种模式的字符为分割点,切割字符串,将其分割为一个字符串数组。
- 需传入参数是作为分割点的正则表达式。
- split 的用法如下:
//定义匹配模式--正则表达式
String pattern = "\\w"; //字母、数字、下划线
//创建字符串
String str = "1|uh|hkh|&*(|^|%)";
//split方法会返回一个String数组
String[] result = str.split(pattern);
//打印结果
System.out.println(Arrays.toString(result));
运行结果如下:
练习
Ⅰ:简单验证身份证号码
写出方法:
public static boolean idMatches(String id){
String idPattern = "[1-9][0-9]{1,16}[0-9X]";
return id.matches(idPattern);
}
调用该方法,并打印输出:
System.out.println("输入号码是否为身份证号:"+idMatches("11111111111111111X"));
System.out.println("输入号码是否为身份证号:"+idMatches("123"));
运行结果如下:
Ⅱ:简单提取标记语言标签间内容
写出方法:
public void grabInfo() {
String str4 = "<h1>這是測試結果</h1><p>test a</p>";
String pattern3 = "(<\\w+>)|(</\\w+>)";
String str5 = str4.replaceAll(pattern3,"");
System.out.println(str5);
}
运行结果如下:
Ⅲ:简单验证用户输入是否为邮箱
写出方法:
public static boolean emailMatches(String emailAddress){
String emailPattern = "\\w{6,18}@(\\w*\\.){1,3}com";
return emailAddress.matches(emailPattern);
}
调用方法:
System.out.println("输入地址是否为邮箱地址:"+emailMatches("644544496@qq.com"));
System.out.println("输入地址是否为邮箱地址:"+emailMatches("123456"));
运行结果如下:
Ⅳ:简单验证电话号码
写出方法:
public static boolean phoneNumberMatches(String phoneAddress){
String phonePattern = "\\d{3,11}";
return phoneAddress.matches(phonePattern);
}
调用方法:
System.out.println("输入号码是否为电话号码:"+phoneNumberMatches("19936547896"));
System.out.println("输入号码是否为电话号码:"+phoneNumberMatches("12315"));
运行结果如下: