黑马程序员-Java常见API案例小结III(正则表达式 )
来源:互联网 发布:淘宝 访问受限 编辑:程序博客网 时间:2024/05/18 02:07
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Java正则表达式
正则表达式是一种可以用于模式匹配和替换的规范。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则达表示通常被用来检索、替换那些符合某个模式的文本。
二、规则及应用
- 字符串匹配
- 字符串查找
- 字符串替换
- 字符串分割
1.常见规则
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:边界匹配器
^ 行的开头
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:边界匹配器
^ 行的开头
^java 条件限制为以Java为开头字符
$ 行的结尾
$ 行的结尾
ava$ 条件限制为以java为结尾字符
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
2.常见功能:
A:判断功能
String类的public boolean matches(String regex)
B:分割功能
String类的public String[] split(String regex)
C:替换功能
String类的public String replaceAll(String regex,String replacement)
D:获取功能
Pattern和Matcher
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
find():查找存不存在
group():获取刚才查找过的数据
3.常见应用
加入特定限制条件「[]」
[a-z] 条件限制在小写a to z范围中一个字符
[A-Z] 条件限制在大写A to Z范围中一个字符
[a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符
[0-9] 条件限制在小写0 to 9范围中一个字符
[0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符
[0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集)
[]中加入^后加再次限制条件「[^]」
[^a-z] 条件限制在非小写a to z范围中一个字符
[^A-Z] 条件限制在非大写A to Z范围中一个字符
[^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符
[^0-9] 条件限制在非小写0 to 9范围中一个字符
[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符
[^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集)
在限制条件为特定字符出现0次以上时,可以使用「*」
J* 0个以上J
.* 0个以上任意字符
J.*D J与D之间0个以上任意字符
在限制条件为特定字符出现1次以上时,可以使用「+」
J+ 1个以上J
.+ 1个以上任意字符
J.+D J与D之间1个以上任意字符
在限制条件为特定字符出现有0或1次以上时,可以使用「?」
JA? J或者JA出现
限制为连续出现指定次数字符「{a}」
J{2} JJ
J{3} JJJ
文字a个以上,并且「{a,}」
J{3,} JJJ,JJJJ,JJJJJ,???(3次以上J并存)
文字个以上,b个以下「{a,b}」
J{3,5} JJJ或JJJJ或JJJJJ
两者取一「|」
J|A J或A
Java|Hello Java或Hello
「()」中规定一个组合类型
比如,我查询<a href=/"index.html/">index</a>中<a href></a>间的数据,可写作<a.*href=/".*/">(.+?)</a>
在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数:
Pattern Pattern.compile(String regex, int flag)
[a-z] 条件限制在小写a to z范围中一个字符
[A-Z] 条件限制在大写A to Z范围中一个字符
[a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符
[0-9] 条件限制在小写0 to 9范围中一个字符
[0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符
[0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集)
[]中加入^后加再次限制条件「[^]」
[^a-z] 条件限制在非小写a to z范围中一个字符
[^A-Z] 条件限制在非大写A to Z范围中一个字符
[^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符
[^0-9] 条件限制在非小写0 to 9范围中一个字符
[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符
[^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集)
在限制条件为特定字符出现0次以上时,可以使用「*」
J* 0个以上J
.* 0个以上任意字符
J.*D J与D之间0个以上任意字符
在限制条件为特定字符出现1次以上时,可以使用「+」
J+ 1个以上J
.+ 1个以上任意字符
J.+D J与D之间1个以上任意字符
在限制条件为特定字符出现有0或1次以上时,可以使用「?」
JA? J或者JA出现
限制为连续出现指定次数字符「{a}」
J{2} JJ
J{3} JJJ
文字a个以上,并且「{a,}」
J{3,} JJJ,JJJJ,JJJJJ,???(3次以上J并存)
文字个以上,b个以下「{a,b}」
J{3,5} JJJ或JJJJ或JJJJJ
两者取一「|」
J|A J或A
Java|Hello Java或Hello
「()」中规定一个组合类型
比如,我查询<a href=/"index.html/">index</a>中<a href></a>间的数据,可写作<a.*href=/".*/">(.+?)</a>
在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数:
Pattern Pattern.compile(String regex, int flag)
三、常见案例
1. 请验证该QQ号码 是否为正确的号码
长度 6-12位
不以0开头
都是数字
长度 6-12位
不以0开头
都是数字
分析:
1: 键盘输入QQ号码(字符串的QQ号码)
2: 通过输入QQ号码, 验证长度是否合法
是:
判断是否以数字0开头
是:对不起,QQ号码无效,不能以0开头
否:
判断每一位是否都是数字
如果发现其中的哪一位不是数字,说明该QQ号码 无效
如果都是数字,说明该QQ号码正确
否:长度不足,请重新输入, 长度为 6-12位
2: 通过输入QQ号码, 验证长度是否合法
是:
判断是否以数字0开头
是:对不起,QQ号码无效,不能以0开头
否:
判断每一位是否都是数字
如果发现其中的哪一位不是数字,说明该QQ号码 无效
如果都是数字,说明该QQ号码正确
否:长度不足,请重新输入, 长度为 6-12位
代码实现:
package com.csdn.stringbuffer;/*分析: * 1: 键盘输入QQ号码(字符串的QQ号码) * 2: 通过输入QQ号码, 验证长度是否合法 * 是: * 判断是否以数字0开头 * 是:对不起,QQ号码无效,不能以0开头 * 否: * 判断每一位是否都是数字 * 如果发现其中的哪一位不是数字,说明该QQ号码 无效 * 如果都是数字,说明该QQ号码正确 * * 否:长度不足,请重新输入, 长度为 6-12位 * */import java.util.Scanner;public class Test3 {public static void main(String[] args) {method1();method2();}private static void method2() {// 1: 键盘输入QQ号码(字符串的QQ号码)Scanner sc = new Scanner(System.in);System.out.println("请输入一个QQ号码:");// 获取键盘录入的字符串String qq = sc.nextLine();// 定义一个正则表达式, 它是一个字符串, 符合某种语法规则的字符串String regex = "[1-9][0-9]{5,11}";// 验证QQ号码boolean flag = qq.matches(regex);if (flag) {System.out.println("QQ合法");} else {System.out.println("QQ不合法");}}private static void method1() {// 1: 键盘输入QQ号码(字符串的QQ号码)Scanner sc = new Scanner(System.in);// 获取键盘录入的字符串String qq = sc.nextLine();boolean flag = true;// 2: 通过输入QQ号码, 验证长度是否合法if (qq.length() >= 6 && qq.length() <= 12) {// 判断是否以数字0开头if (qq.startsWith("0")) {System.out.println("对不起,QQ号码无效,不能以0开头");} else {// 判断每一位是否都是数字for (int i = 0; i < qq.length(); i++) {// 获取到每一位数据char ch = qq.charAt(i);if (ch >= '0' && ch <= '9') {// 正确} else {// 错误System.out.println("对不起,QQ号码必须都是数字");flag = false;break;// 退出当前循环}}}} else {System.out.println("长度不足,请重新输入, 长度为 6-12位");}if (flag) {// 正确的qq号码System.out.println("这是个正确的QQ号码");}}}
2.通过正则表达式验证 电子邮箱 是否正确
分析Li_Kepei@sina.com.cn
123456@qq.com
18500022116@163.com
18500022116@126.com
haha_Itcast@gmail.com
woshihaha@hotmail.com.cn
[a-zA-Z_0-9]+ @ [a-zA-Z_0-9]+ (\\.[a-zA-Z_0-9]+)+
\\w+ @ \\w+ (\\.\\w+)+
123456@qq.com
18500022116@163.com
18500022116@126.com
haha_Itcast@gmail.com
woshihaha@hotmail.com.cn
[a-zA-Z_0-9]+ @ [a-zA-Z_0-9]+ (\\.[a-zA-Z_0-9]+)+
\\w+ @ \\w+ (\\.\\w+)+
代码实现:
public class RegexDemo {public static void main(String[] args) {//指定邮箱String email = "18500022116@126.com";//String email = "@.";//String email = "1@2.3";//指定规则String regex = "\\w+@\\w+(\\.\\w+)+";//验证boolean flag = email.matches(regex);System.out.println(flag);}}
3.需求: 我我我我我...想想想想想想...学学学学学...习习习习..Java
结果: 我想学习Java
public class RegexDemo5 {public static void main(String[] args) {//指定数据String str = "我我我我........想想想想想想...学学学学学...习习习习..Java";//指定规则String regex = "(\\.)+";//替换String result = str.replaceAll(regex, "");System.out.println(result);//我我我我我想想想想想想学学学学学习习习习Java//指定规则//String regex2 = "我+想+学+习+Java";String regex2 = "(.)\\1+";//替换String result2 = result.replaceAll(regex2, "$1");//我想学习JavaSystem.out.println(result2);}}
4.需求: da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
我要获取上面字符串中,由3个字母组成的单词,并打印
代码实现:
import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexDemo7 {public static void main(String[] args) {//指定数据//指定规则//使用规则//面向对象的正则表达式//1: 把正则表达式 封装成对象//String regex = "[a-zA-Z]{3}";String regex = "\\b[a-zA-Z]{3}\\b";Pattern p = Pattern.compile(regex);//2:使用对象 与 数据进行匹配, 产生匹配器对象(结果)String data = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";Matcher m = p.matcher(data);//3:通过匹配器对象(结果),获取想要的数据//判断是否有符合条件的数据 find()while(m.find()){//有 ,获取数据 group()System.out.println(m.group());}}}
0 0
- 黑马程序员-Java常见API案例小结III(正则表达式 )
- 黑马程序员-Java常见API案例小结I
- 黑马程序员-Java常见API案例小结II(StringBuffer、基本数据类型包装类及其他类 )
- 黑马程序员---正则表达式小结
- 黑马程序员--Java中正则表达式的基础小结
- 黑马程序员--正则表达式(Java)
- Java基础---正则表达式 (黑马程序员)
- 黑马程序员_12 正则表达式小结
- 黑马程序员 Java正则表达式
- 黑马程序员----JAVA----正则表达式
- 黑马程序员--java正则表达式
- 黑马程序员--JAVA正则表达式
- 【黑马程序员】java-正则表达式
- 黑马程序员-java正则表达式
- 黑马程序员-Java正则表达式
- 黑马程序员--------java 正则表达式
- 黑马程序员>>>Java正则表达式
- 黑马程序员-----java正则表达式
- 面试题27:二叉搜索树转换为有序双向链表
- 第十三周 项目1-动物这样叫(2)
- Java基础—线程间通信
- 01背包问题和完全背包问题
- 求虐,我还想再拓展一次
- 黑马程序员-Java常见API案例小结III(正则表达式 )
- Guava ---- Maps
- div自动居中
- JS实现返回页面顶部
- 点击ImageButton 不刷新页面
- 移植overlayfs到MediaTek_ApSoC_SDK_4300
- 关于$.ajax 返回返回值问题
- js转换数据库DateTime字段类型
- 用javaScript解决Form的不能嵌套