黑马程序员——04 高新技术(一)关于正则表达式的理解和常用方法
来源:互联网 发布:网络拓扑分层的好处 编辑:程序博客网 时间:2024/06/10 02:25
------- android培训、java培训、期待与您交流! --------
正则表达式的出现是为了使程序员能够更加简便的操作字符串,就是一种事先规定好的规则,它的优点在于代码简洁,它通过一些特定的符号来体现,但是阅读性变差了.
例如:String Regex = "[0-9 ]";
1.正则表达式需要记住的特定符号所代表的含义,只有记住了这些才能熟练地使用正则表达式。
1.1 字符
\\反斜线字符 前一个\代表转义1.2 字符类(最常用的)
[abc]a、b 或 c(简单类)[^abc]任何字符,除了 a、b 或 c(否定)[a-zA-Z]a 到 z 或 A 到 Z,两头的字母包括在内(范围)[a-d[m-p]]a 到 d 或 m 到 p:[a-dm-p](并集)[a-z&&[def]]d、e 或 f(交集)[a-z&&[^bc]]a 到 z,除了 b 和 c:[ad-z](减去)[a-z&&[^m-p]]a 到 z,而非 m 到 p:[a-lq-z](减去)1.3 预定义字符类
.任何字符(与行结束符可能匹配也可能不匹配)\d数字:[0-9]\D非数字: [^0-9]\s空白字符:[ \t\n\x0B\f\r]\S非空白字符:[^\s]\w单词字符:[a-zA-Z_0-9]\W非单词字符:[^\w]1.4 Greedy 数量词
X?X,一次或一次也没有X*X,零次或多次X+X,一次或多次X{n}X,恰好 n 次X{n,}X,至少 n 次X{n,m}X,至少 n 次,但是不超过 m 次2. 正则表达式的分组概念
( )就是正则表达式中的封装格式,称之为组,每个组都有编号,默认编号从1开始。
它的使用是通过 "\\组的编号来使用的"。
例如,正则表达式中(.)表示将任意一个字符封装成组或者说是一个对象,字符串中\\1就是对这个对象的复用1 次,注意的是这里的1代表的是组的编号而不是复用次数,想要复用多次可以写作\\1+.
- String str = "abcdddeffgggghhhhh";
- String regex1 = "."; //"."和(.)代表的意思是相同的
- String regex2 = "(.)\\1"; // 复用了1次
- String regex3 = "(.)\\1+"; //复用了1次或多次
- String[] strs1 = str.split(regex1);//全被切割了所以没内容
- String[] strs2 = str.split(regex2);//相当于按照两个相同字符来切割的,打印结果abcdeh
- String[] strs3 = str.split(regex3);//按至少2个相同的字符打印,打印结果abce
3. 正则表达式的4中常用操作
3.1 匹配
其实使用的就是String类中的matches(String regex)方法,regex为正则表达式,如果匹配规则就返回true。
返回值为String类型。
如检验手机号是否正确,要求位数为11位,第一位必须是1,第二位为3、5、8中的其中一个,后9位只要是数字 就可以。
- String telNum1 = "13855555501";
- String telNum2 = "05855555501";
- String telNum3 = "138555555018000000";
- String regex = "1[358][0-9]{9}";//规定规则,意义对应:1--第一位为1;[358]第二位为358之一
- // [0-9]{9}连续校验9次,为数字即可。
- boolean b1 = telNum1.matches(regex);//返回true
- boolean b2 = telNum2.matches(regex);//返回false
- boolean b3= telNum3.matches(regex);//返回false
3.2 切割
其实使用的就是String的split(String regex)方法。返回值为String[ ]类型。
- String str = "abcdddeffgggghhhhh";
- String regex2 = "(.)\\1";// 复用了1次,代表将2个重复的切割
- String regex3 = "(.)\\1+";//复用了1次或多次,代表将2个以上重复的切割
- String[] strs2 = str.split(regex2);//相当于按照两个相同字符来切割的,打印结果abcdeh
- String[] strs3 = str.split(regex3);//按至少2个相同的字符打印,打印结果abce
3.3 替换
其实就是使用了String的replaceAll(String regex, String str)方法,第一个参数就是正则表达式,规定要什么样的 位置需要替换,第二个参数表示所要替换成的表达式。返回值为String类型。
例如如何将手机号的的4-7为屏蔽成****,思路就是:先将1-3位和8-11位分别封装成两个组,再将中间的4-7位替换成*,另外两组的内容不变($1 代表使用获得的第1组对象内容)。
- String telNum1 = "13855555501";
- String str1 = telNum1.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
- System.err.println(str1);//返回结果为138****5501
3.4 获取字符串中符合正则规则的内容
步骤:
1.将正则规则封装成对象
Pattern p = Pattern.compile(regex);
- String str = "good good study , day day up! ";
- String regex = "\\b[a-z]{3}\\b"; // \\b 为单词边界
- Matcher m = Pattern.compile(regex).matcher(str);
- while(m.find())
- {
- System.out.print(m.group()); // 输出为 day day
- }
2.创建一个匹配器,通过正则对象的matcher方法。
Matcher m = p.matcher(被操作字符串);
3.通过匹配器对象的方法对字符串进行操作
如先通过m.find()查找与该模式匹配的输入序列的下一个子序列,他返回boolean
再通过m.group()返回子序列。
while(m.find)
{ m.group; }
举例:返回下列字符串中由三个字母所组成的单词。
- String str = "good good study , day day up! ";
- String regex = "\\b[a-z]{3}\\b"; // \\b 为单词边界
- Matcher m = Pattern.compile(regex).matcher(str);
- while(m.find())
- {
- System.out.print(m.group()); // 输出为 day day
- }
--------- android培训、java培训、期待与您交流! ----------
- 黑马程序员——04 高新技术(一)关于正则表达式的理解和常用方法
- 黑马程序员——高新技术 关于面向对象的理解
- 黑马程序员——高新技术(一)
- 黑马程序员——高新技术(一)
- 黑马程序员——高新技术(一)
- 黑马程序员—java高新技术(一)
- 黑马程序员——高新技术---Java基础-常用类-正则表达式,Math类,Random类,System类,Date类
- 黑马程序员——常用正则表达式字符的说明
- 黑马程序员——正则表达式应用(再次理解)
- [黑马程序员](第25天)高新技术之正则表达式
- 黑马程序员——关于正则表达式的总结
- 黑马程序员——Java高新技术(MyEclipse常用快捷键)
- 黑马程序员——浅谈java中的高新技术(一)
- 黑马程序员——JAVA高新技术总结(一)
- 黑马程序员——JAVA高新技术总结(一)
- 黑马程序员—Java高新技术总结(一)
- 黑马程序员 高新技术(一)
- 黑马程序员--常用的正则表达式
- partitioner编程
- Leetcode-Two Sum
- Bug:ForkJoinTask的异常获取错误
- 软件开发培训不得不选传智播客的九大理由
- Dell、Intel与Cloudera携手发力Hadoop及其背后的故事
- 黑马程序员——04 高新技术(一)关于正则表达式的理解和常用方法
- Halcon形状匹配
- 学习bash脚本
- OCP-1Z0-051-题目解析-第3题
- EXP-00000错误的处理过程 导出错误 未安装视图
- 【自己动手写神经网络】小白入门连载(二)--机器人时代必须得有人工神经(不是神经病)
- webservice实例
- swift学习_xcode基础学习
- GCD(二)