一、概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
简单点,说白话:正则表达式——正确的表达式。
二、作用
有啥用呢?
通常用来检测字符串是否符合某规则、根据某规则切分字符串或替换符合规则的文本 。
省流:用来检测其它文本的。
三、举例
以检验一串数字是否为QQ号码为例:
1、一串数字若为QQ需满足以下要求:
①为5~11位数字;
②第1位不能为0。
2、用if语句编写程序(主程序段):
String num = "369369369";
boolean flag = false;
if (num.length() >= 5 && num.length <= 11 && !num.startsWith("0")) {
flag = true;
}
System.out.print(flag);
3、用正则表达式编写(主程序段);
String num = "369369369";
String regex = "[1-9][0-9]{4,14}";
boolean flag = num.matches(regex);
用到的方法名:
boolean matches(String regex)
描述:
当前字符串是否匹配给定的正则表达式
四、简单的几个常用方法
方法名 | 描述 |
---|---|
boolean matches(String regex) | 当前字符串是否匹配给定的正则表达式 |
String replaceAll(String regex, String replacement) | 使用replacement替换当前字符串中所有符合正则表达式的内容 |
String[] split(String regex) | 根据给定的正则表达式拆分当前字符串 |
五、语法
正则表达式中,字符分为普通字符和元字符
普通字符:大小写字母,数字,下划线,部分特殊符号,非西文字符等
主要元字符:\ {} * ? + () [] - | ^ $
匹配规则:
合法字符
字符 | 解释 |
---|---|
X | 字符X(X可代表任何合法的字符) |
\0mnn | 八进制数0mnn所代表的字符 |
\xhh | 十六进制数0xhh所代表的字符 |
\uhhhh | 十六进制数0xhhhh所表示的Unicode字符 |
\t | 制表符("\u0009") |
\n | 新行(换行)符(‘\u000A’) |
\r | 回车符(‘\u000D’) |
\f | 换页符(‘\u000C’) |
\a | 报警(bell)符(‘\u0007’) |
\e | Escape 符(‘\u001B’) |
\cx | x 对应的的控制符。例如,\cM 匹配 Ctrl-M。x 值必须为 A~Z 或 a~z 之一。 |
特殊字符
特殊字符 | 说明 |
---|---|
$ | 匹配一行的结尾。要匹配 $ 字符本身,请使用\$ |
^ | 匹配一行的开头。要匹配 ^ 字符本身,请使用\^ |
() | 标记子表达式的开始和结束位置。要匹配这些字符,请使用\( 和\) |
[] | 用于确定中括号表达式的开始和结束位置。要匹配这些字符,请使用\[ 和\] |
{} | 用于标记前面子表达式的出现频度。要匹配这些字符,请使用\{ 和\} |
* | 指定前面子表达式可以出现零次或多次。要匹配 * 字符本身,请使用\* |
+ | 指定前面子表达式可以出现一次或多次。要匹配 + 字符本身,请使用\+ |
? | 指定前面子表达式可以出现零次或一次。要匹配 ?字符本身,请使用\? |
. | 匹配除换行符\n 之外的任何单字符。要匹配. 字符本身,请使用\. |
\ | 用于转义下一个字符,或指定八进制、十六进制字符。如果需匹配\ 字符,请用\\ |
| | 指定两项之间任选一项。如果要匹配丨 字符本身,请使用\| |
预定义字符
预定义字符 | 说明 |
---|---|
. | 可以匹配任何字符 |
\d | 匹配 0~9 的所有数字 |
\D | 匹配非数字 |
\s | 匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等 |
\S | 匹配所有的非空白字符 |
\w | 匹配所有的单词字符,包括 0~9 所有数字、26 个英文字母和下画线_ |
\W | 匹配所有的非单词字符 |
六、简单的练习
1、
举例:校验手机号码
1:要求为11位数字
2:第1位为1,第2位为3~5,7~8中的一个,后面9位为0~9之间的任意数字。
代码演示:
String phone = "18810022666";
String regex = "1[34578][0-9]{9}";
boolean flag = phone.matches(regex);
2、
举例:将字符串中的数字全部替换成"!"
String str = "1a2b3c4d";
str = str.replaceAll("\\d", "!");
System.out.println(str);
3、
举例:根据空格切割字符串
String str = "杭 师 大";
String[] arr = str.split(" ");
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
七、常用的类
等我学了类再说吧。。