黑马程序员 Java基础 正则表达式
2015-08-14 07:54
615 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一 概述
就是符合一定规则的字符串
二 常用规则
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 单词边界
就是不是单词字符的地方。
举例: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 次
三 常见功能
匹配、切割、替换、获取
四 匹配
// public boolean matches(String regex)
// 告知此字符串是否匹配给定的正则表达式
代码1:
boolean b = "13436975980".matches("1[38]\\d{9}");
第一位是1,第二位是3或者8,后面9位都是数字
代码2:
boolean b2 = "linqingxia@126.com".matches("\\w+@\\w{2,6}(\\.\\w{2,3})+");
单词字符一位或者多位,@,单词字符2-6位,一个或者多个(“.”,2-3位单词字符)
五 切割
// public String[] split(String regex)
// 根据给定正则表达式的匹配拆分此字符串。
代码1:
案例:
六 正则中的复用:用()封装
1)
[ ] 封装内容。
{ } 封装次数。
( ) 封装复用的内容
2)在使用()封装时,子偶顶给()编号,从1开始,称为正则表达式中的组。通过组的编号就可以调用指定的组,进行复用。
3)组的嵌套
例 如:( ( A ( B ( D ) ) ) )
\\1 (第一组) ( ( A ( B ( D ) ) ) )
\\2 ( A )
\\3 ( B ( D ) )
\\4 ( D )
\\0 代表整个嵌套组。组0代表整个表达式
4)案例
代码:
// regex也可以写成"(.)(\\1)+"
String[] strs = "lily%%%%%%lucy&&&&&&&&&&kate".split("(.)\\1+");
七 替换
// String类的public String replaceAll(String regex,String replacement)
// 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
Stirng result = "helloqq12345worldkh622112345678java".replaceAll("\\d+", "");
八 获取
Pattern和Matcher
* Pattern :
* 正则表达式的编译表示形式。
* 指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
代码1:
find():查找存不存在
group():获取刚才查找过的数据
代码2:
* 获取功能:
* 获取下面这个字符串中由三个字符组成的单词
* da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
一 概述
就是符合一定规则的字符串
二 常用规则
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 单词边界
就是不是单词字符的地方。
举例: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 次
三 常见功能
匹配、切割、替换、获取
四 匹配
// public boolean matches(String regex)
// 告知此字符串是否匹配给定的正则表达式
代码1:
boolean b = "13436975980".matches("1[38]\\d{9}");
第一位是1,第二位是3或者8,后面9位都是数字
代码2:
boolean b2 = "linqingxia@126.com".matches("\\w+@\\w{2,6}(\\.\\w{2,3})+");
单词字符一位或者多位,@,单词字符2-6位,一个或者多个(“.”,2-3位单词字符)
五 切割
// public String[] split(String regex)
// 根据给定正则表达式的匹配拆分此字符串。
代码1:
String[] strArray = "18-24".split("-"); String[] strArray2 = "aa,bb,cc".split(","); String[] strArray3 = "aa.bb.cc".split("\\."); String[] strArray4 = "aa bb cc".split(" +"); String[] strArray5 = "E:\\JavaSE\\day14\\avi".split("\\\\");
案例:
/* * 我有如下一个字符串:"91 27 46 38 50" * 请写代码实现最终输出结果是:"27 38 46 50 91" */ public static void main(String[] args) { String[] strArray = "91 27 46 38 50".split(" "); int[] arr = new int[strArray.length]; for(int i = 0; i < arr.length; i++){ arr[i] = Integer.parseInt(strArray[i]); } Arrays.sort(arr); StringBuilder sb = new StringBuilder(); for(int j = 0; j < arr.length; j++){ sb.append(arr[j]).append(" "); } System.out.println(sb.toString().trim()); }
六 正则中的复用:用()封装
1)
[ ] 封装内容。
{ } 封装次数。
( ) 封装复用的内容
2)在使用()封装时,子偶顶给()编号,从1开始,称为正则表达式中的组。通过组的编号就可以调用指定的组,进行复用。
3)组的嵌套
例 如:( ( A ( B ( D ) ) ) )
\\1 (第一组) ( ( A ( B ( D ) ) ) )
\\2 ( A )
\\3 ( B ( D ) )
\\4 ( D )
\\0 代表整个嵌套组。组0代表整个表达式
4)案例
代码:
// regex也可以写成"(.)(\\1)+"
String[] strs = "lily%%%%%%lucy&&&&&&&&&&kate".split("(.)\\1+");
七 替换
// String类的public String replaceAll(String regex,String replacement)
// 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
Stirng result = "helloqq12345worldkh622112345678java".replaceAll("\\d+", "");
八 获取
Pattern和Matcher
* Pattern :
* 正则表达式的编译表示形式。
* 指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
代码1:
* 模式和匹配器的基本使用顺序 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); // 当然如果做判断,太复杂了,完全可以下面这样子 System.out.println("aaaaab".matches("a*b")); // 返回true }
find():查找存不存在
group():获取刚才查找过的数据
代码2:
* 获取功能:
* 获取下面这个字符串中由三个字符组成的单词
* da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
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"; // \\b的使用!!! Pattern p = Pattern.compile(regex); Matcher m = p.matcher(s); //// public boolean find() //boolean flag = m.find(); //System.out.println(flag); //// public String group() // String ss = m.group(); // 注意:一定要先find(),然后才能group() //System.out.println(ss); while(m.find()){ System.out.println(m.group()); } }
相关文章推荐
- 黑马程序员 Java基础 集合2
- 黑马程序员 Java基础 String类
- 程序员求职简历要点《经典》
- 【LeetCode-面试算法经典-Java实现】【125-Valid Palindrome(回文字验证)】
- 【LeetCode-面试算法经典-Java实现】【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】
- 【LeetCode-面试算法经典-Java实现】【120-Triangle(三角形)】
- 面试题五: 从尾到头打印链表
- 腾讯面试专场
- 阿里巴巴面试专场
- 黑马程序员--Java基础--String
- 黑马程序员——-——java基础之异常
- 黑马程序员---关于取出一个字符串中字母个数的题目分析
- 【经典面试题】有关sizeof、strlen处理字符串的问题
- 做什么职业,也别做程序员,尤其是Java程序员
- 【经典面试题】有关指针、内存空间如何申请调用的问题
- 黑马程序员———集合及其collection接口及其子类的简单介绍
- 黑马程序员———正则表达式及其其他类
- 十个让你成为优秀程序员的有效方法
- 黑马程序员———API之StringBuffer、Integer和Character
- 黑马程序员———面向对象之包、访问修饰符、内部类