黑马程序员——正则篇
来源:互联网 发布:航拍软件 编辑:程序博客网 时间:2024/04/28 16:33
概述
正则表达式就是符合一定规则的字符串
使用步骤
①.先用字符串定义规则
String regex = "[1-9][0-9]{4,14}";
②.通过String类的matches(String regex)方法匹配
boolean flag = s.match(regex);
/* * 正则表达式:符合一定规则的字符串。 * 案例:校验QQ号码 */public class RegexDemo {public static void main(String[] args) {// 创建键盘录入对象Scanner sc = new Scanner(System.in);System.out.println("请输入你的QQ号码:");String qq = sc.nextLine();System.out.println("checkQQ:" + checkQQ(qq));}//方式1public static boolean checkQQ(String qq) {String regex ="[1-9][0-9]{4,14}";//public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式boolean flag = qq.matches(regex);return flag;}//方式2public static boolean checkQQ(String qq) {return qq.matches("[1-9][0-9]{4,14}");}//方式3public static boolean checkQQ(String qq) {return qq.matches("[1-9]\\d{4,14}");}
常见规则
1.字符
x 字符 x。举例:'a'表示字符a
\\ 反斜线字符。
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
2.字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括
3.预定义字符类
. 任何字符。我的就是.字符本身,怎么表示呢? \.
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须有这些东西组成
4.边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi
5.Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
常见功能:(分别用的是谁呢?)
1.判断功能
String类的public boolean matches(String regex)
/* * 判断功能 *String类的public boolean matches(String regex) * * 需求: * 判断手机号码是否满足要求? * * 分析: * A:键盘录入手机号码 * B:定义手机号码的规则 * 13436975980 * 13688886868 * 13866668888 * 13456789012 * 13123456789 * 18912345678 * 18886867878 * 18638833883 * C:调用功能,判断即可 * D:输出结果 */public class RegexDemo {public static void main(String[] args) {//键盘录入手机号码Scanner sc = new Scanner(System.in);System.out.println("请输入你的手机号码:");String phone = sc.nextLine();//定义手机号码的规则String regex = "1[38]\\d{9}";//调用功能,判断即可boolean flag = phone.matches(regex);//输出结果System.out.println("flag:"+flag);}}
/* * 校验邮箱 * * 分析: * A:键盘录入邮箱 * B:定义邮箱的规则 * 1517806580@qq.com * liuyi@163.com * linqingxia@126.com * fengqingyang@sina.com.cn * fqy@itcast.cn * C:调用功能,判断即可 * D:输出结果 */public class RegexTest {public static void main(String[] args) {//键盘录入邮箱Scanner sc = new Scanner(System.in);System.out.println("请输入邮箱:");String email = sc.nextLine();//定义邮箱的规则//String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+";String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+";//调用功能,判断即可boolean flag = email.matches(regex);//输出结果System.out.println("flag:"+flag);}}
2.分割功能
String类的public String[] split(String regex)
/* * 分割功能 *String类的public String[] split(String regex) *根据给定正则表达式的匹配拆分此字符串。 * * 举例: * 百合网,世纪佳缘,珍爱网,QQ * 搜索好友 * 性别:女 * 范围:"18-24" * * age>=18 && age<=24 */public class RegexDemo {public static void main(String[] args) {//定义一个年龄搜索范围String ages = "18-24";//定义规则String regex = "-";//调用方法String[] strArray = ages.split(regex);////遍历//for(int x=0; x<strArray.length; x++){//System.out.println(strArray[x]);//}//如何得到int类型的呢?int startAge = Integer.parseInt(strArray[0]);int endAge = Integer.parseInt(strArray[1]);//键盘录入年龄Scanner sc = new Scanner(System.in);System.out.println("请输入你的年龄:");int age = sc.nextInt();if(age>=startAge && age<=endAge) {System.out.println("你就是我想找的");}else {System.out.println("不符合我的要求,gun");}}}
public class RegexTest {public static void main(String[] args) {// 定义一个字符串String s = "91 27 46 38 50";// 把字符串进行分割,得到一个字符串数组String[] strArray = s.split(" ");// 把字符串数组变换成int数组int[] arr = new int[strArray.length];for (int x = 0; x < arr.length; x++) {arr[x] = Integer.parseInt(strArray[x]);}// 对int数组排序Arrays.sort(arr);// 把排序后的int数组在组装成一个字符串StringBuilder sb = new StringBuilder();for (int x = 0; x < arr.length; x++) {sb.append(arr[x]).append(" ");}//转化为字符串String result = sb.toString().trim();//输出字符串System.out.println("result:"+result);}}
3.替换功能
String类的public String replaceAll(String regex,String replacement)
/* * 替换功能 * String类的public String replaceAll(String regex,String replacement) * 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 */public class RegexDemo {public static void main(String[] args) {// 定义一个字符串String s = "helloqq12345worldkh622112345678java";// 我要去除所有的数字,用*给替换掉// String regex = "\\d+";// String regex = "\\d";//String ss = "*";// 直接把数字干掉String regex = "\\d+";String ss = "";String result = s.replaceAll(regex, ss);System.out.println(result);}}
4.获取功能
Pattern和Matcher
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
find():查找存不存在group():获取刚才查找过的数据
/* * 获取功能 *Pattern和Matcher类的使用 * *模式和匹配器的基本使用顺序 */public class RegexDemo {public static void main(String[] args) {// 模式和匹配器的典型调用顺序// 把正则表达式编译成模式对象Pattern p = Pattern.compile("a*b");// 通过模式对象得到匹配器对象,这个时候需要的是被匹配的字符串Matcher m = p.matcher("aaaaab");// 调用匹配器对象的功能boolean b = m.matches();System.out.println(b);//这个是判断功能,但是如果做判断,这样做就有点麻烦了,我们直接用字符串的方法做String s = "aaaaab";String regex = "a*b";boolean bb = s.matches(regex);System.out.println(bb);}}
/* * 获取功能: * 获取下面这个字符串中由三个字符组成的单词 * da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu? */public class RegexDemo2 {public static void main(String[] args) {// 定义字符串String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";// 规则String regex = "\\b\\w{3}\\b";// 把规则编译成模式对象Pattern p = Pattern.compile(regex);// 通过模式对象得到匹配器对象Matcher m = p.matcher(s);// 调用匹配器对象的功能// 通过find方法就是查找有没有满足条件的子串// public boolean find()// boolean flag = m.find();// System.out.println(flag);// // 如何得到值呢?// // public String group()// String ss = m.group();// System.out.println(ss);//// // 再来一次// flag = m.find();// System.out.println(flag);// ss = m.group();// System.out.println(ss);while (m.find()) {System.out.println(m.group());}// 注意:一定要先find(),然后才能group()// IllegalStateException: No match found// String ss = m.group();// System.out.println(ss);}}
- 黑马程序员——正则篇
- 黑马程序员——正则
- 黑马程序员——正则
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员——JDK5特性、正则 笔记第十二篇
- 黑马程序员——第四篇_正则表达式
- 黑马程序员—【Java基础篇】之正则表达式
- 黑马程序员———正则表达式
- 黑马程序员———正则表达式
- 黑马程序员———正则表达式
- Animation.setFillAfter and Animation.setFillBefore的作用
- 一个使用命令行编译Android项目的工具类
- 深入理解抽象类和接口
- java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut myMethod
- 在VB语言中,DOEVENTS的具体的用法和含义
- 黑马程序员——正则篇
- html meta 元素
- javaday27-反射
- 计算机专业研究生应该怎么读
- 258. Add Digits
- Unity打包的APK中Asset文件分析
- [leetcode oj 231]Power of Two
- 事件分发和响应链
- 针对ie8的css hack