符号 | 描述 |
\ | 转义符 |
? | 匹配前面的表达式零次或一次 等价于{0,1} |
* | 匹配前面表达式任意次 等价于{0,} |
+ | 匹配前面表达式一次或多次 等价于{1,} |
. | 匹配除了"\r\n"以外的任意单个字符 |
[^xyz] | 匹配不包含的任意一个字符 |
\d | 匹配一个数字字符 等价于[0-9] \D:匹配一个非数字 |
\w | 匹配包括下划线的任何当个字符 类似[A-Za-z0-9_] |
\s | 匹配不可见字符,空格、制表符、换页符等,等价于[ \f\n\r\t\v] |
1.Pattern类:用于创建一个正则表达式
String string = "1.2.3";
// 创建一个正则表达式
Pattern pattern = Pattern.compile("\\.");
// 以.分割返回字符串数组
String[] str = pattern.split(string);
// 把数组转化为集合
List<String> strList = Arrays.asList(str);
System.out.println(strList);
2.Matcher类:用于匹配
常用方法:
matches() | 对字符串进行全词匹配,只有整个字符串都匹配成功才会返回true |
lookingAt() | 从前往后匹配, |
find() | 任意位置进行匹配 注:可以与group()一起使用,用于取出数据 |
String regex = "\\d{11}";
String string = "a151334500122";
// 创建一个正则表达式
Pattern pattern = Pattern.compile(regex);
// 匹配器
Matcher matcher = pattern.matcher(string);
// matches():全词匹配
System.out.println(matcher.matches());// false
/**
* find与matches不能连用,需要重新创建匹配器
*/
matcher = pattern.matcher(string);
// find():任意位置
System.out.println(matcher.find());// true
matcher = pattern.matcher(string);
// lookingAt():从前到后匹配
System.out.println(matcher.lookingAt());// false:因为第一字符为a,所以直接返回false
/**
* find和group一起使用,可以取出数据
*/
String regexTel = "(我的电话号码是)(\\d{11})";
String tel = "aaaaa我的电话号码是15133450012";
pattern = Pattern.compile(regexTel);
matcher = pattern.matcher(tel);
if (matcher.find()) {
// group():参数可以为int型,且保证正则表达式有()划分
System.out.println(matcher.group());
}