正则表达式 是什么: 1.字符串 2.用来表示一个正确规则的式子
例子1:
校验QQ号是否正确:
//QQ号码是由5-11 位数字组成且首位不为0
String qq="123456789";
qq.matches("[1-9][0-9]{4,10}");
表达式的组成规则:
1.字符:
x 字符:字符 x 例子:“1[0-9]{4-10}” 表示 开头为1的QQ号码
\\ 反斜线字符
\n 新行(换行)符('\u000A')
\\r 回车符 ('\u000D')
2 字符类:
[abc] a、b或c(简单类)
[^abc]除了a、b 、c 之外的任何字符
[a-zA-Z] 任意英文字母;
[0-9] 数字0-9中间任意一个 ;
3、预定义字符类:
. :任意字符
\d :数字0-9中的一个
\D:非数字:[^0-9]
\w: 单词字符:[a-zA-Z_0-9]
\W:非单词字符:[^\w]
4.边界匹配器:
^行开头
$行结尾
\b 单词边界
5.Greedy 数量词:
X? :X一次或一次也没有
X* :X 出现0次或多次
X+ :X出现1次或多次
X{n} : 恰好出现n次
X{n,} :至少n次
X{n,m}:至少出现n次,最多出现m次
Pattern 、Matcher 类:
这里介绍下组的概念:组是用括号划分的正则表达式,可以根据组的编号来引用这个组。组号为0表示整个表达式,组号为1表示被第一对括号括起的组,依次类推,例如A(B(C))D,组0是ABCD,组1是BC,组2是C。
Matcher类提供了start(),end(),group()分别用于返回字符串的起始索引,结束索引,以及匹配到到的字符串
Pattern pattern = Pattern.compile("Java");
String test = "123Java456";
Matcher matcher = pattern.matcher(test);
matcher.find();
System.out.println(matcher.start());//返回3
System.out.println(matcher.end());//返回7
System.out.println(matcher.group());//返回Java
Matcher类提供了start(int gropu),end(int group),group(int i),groupCount()用于分组操作
Pattern pattern = Pattern.compile("(Java)(Python)");
String test = "123JavaPython456";
Matcher matcher = pattern.matcher(test);
matcher.find();
System.out.println(matcher.groupCount());//返回2
System.out.println(matcher.group(1));//返回第一组匹配到的字符串"Java",注意起始索引是1
System.out.println(matcher.start(1));//返回3,第一组起始索引
System.out.println(matcher.end(1));//返回7 第一组结束索引
System.out.println(matcher.group(2));//返回第二组匹配到的字符串"Python"
System.out.println(matcher.start(2));//返回7,第二组起始索引
System.out.println(matcher.end(2));//返回13 第二组结束索引
更详细的 Pattern Matcher 见 https://www.cnblogs.com/tester-rikaizhao/articles/9802381.html