概述
正则表达式,正确规则的表达式,指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
正则表达式的组成规则
A、字符
x 字符 x。举例:‘a’表示字符a
\ 反斜线字符。
\n 新行(换行)符 (’\u000A’)
\r 回车符 (’\u000D’)
B:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括
C:预定义字符类
. 任何字符。
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须有这些东西组成
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
E:Greedy 数量词
X? X,一次或一次也没有 比如""空串 就是没有
X* X,零次或多次 大于等于1次 都算多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
举个例子,检验邮箱,邮箱格式为6 ~18 个字符,可使用字母、数字、下划线,需以字母开头,之后是@,3到6个字符,可以是数字或者小写字母,
结尾必须是 .com或.cn或.net或.org
"[a-zA-Z]\\w{5,17}@[0-9a-z]{3,6}\\.(0rg|cn|net|com)"
正则表达式的判断功能
String类的功能:public boolean matches(String regex)
String s = "[a-zA-Z]\\w{5,17}@[0-9a-z]{3,6}\\.(0rg|cn|net|com)";
String email = "abc123@163.com";
boolean bo = email.matches(s);
System.out.println(bo);
输出:true
正则表达式的分割功能split()方法
String类的功能:public String[] split(String regex)
演示案例:我有如下一个字符串:”91das27 dsad46dsad38das50”,去除数字间的字母
String s = "91das27dsad46dsad38das50";
System.out.println(s);
String[] s1 = s.split("[a-z]+");
System.out.println(Arrays.toString(s1));
输出:
91das27dsad46dsad38das50
[91, 27, 46, 38, 50]
正则表达式的替换功能
public String replaceAll(String regex,String replacement)
案例:论坛发表帖子,帖子中需要将数字替换为"*"
String s = "今年我国的GDP为135万亿人民币,增速为9.8%。";
String regex = "[0-9]+";
String s1 = s.replaceAll(regex,"*");
System.out.println(s1);
输出:今年我国的GDP为*万亿人民币,增速为*.*%。
Pattern和Matcher的概述
正则的获取功能需要使用的类
A:Pattern和Matcher的概述
B:模式和匹配器的典型调用顺序
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
正则表达式的获取功能
Pattern和Matcher的结合使用
使用的是 find()方法 和 group()方法 注意一定要先使用find()方法先找到 才能用group()方法获取出来
案例:获取下面这个字符串中由三个字符组成的单词
da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
String str="da jia ting wo shuo, jin tian yao xia yu, bu shang wan zi xi, gao xing bu?";
String regex = "\\b[a-z]{3}\\b";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while(m.find()){
String s = m.group();
System.out.print(s+" ");
输出:jia jin yao xia wan gao