黑马程序员 Java基础 正则表达式
来源:互联网 发布:为了抵御网络黑客攻击 编辑:程序博客网 时间:2024/05/18 01:52
一 概述
就是符合一定规则的字符串
二 常用规则
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基础 正则表达式
- 黑马程序员---java基础之正则表达式
- 黑马程序员----JAVA基础之正则表达式
- 黑马程序员-JAVA基础-正则表达式
- 黑马程序员:Java基础总结----正则表达式
- 黑马程序员 java基础回顾---正则表达式
- <<黑马程序员>>java基础之正则表达式
- 黑马程序员--java基础--正则表达式总结
- 黑马程序员---Java基础总结---正则表达式
- 【黑马程序员】java基础_正则表达式
- 黑马程序员-----java基础 正则表达式
- 黑马程序员-->Java基础-->正则表达式
- 黑马程序员-java基础之正则表达式
- 黑马程序员--java基础--正则表达式
- 黑马程序员 Java基础之正则表达式
- 黑马程序员 java基础之正则表达式
- Java基础---正则表达式 (黑马程序员)
- 黑马程序员--java基础之正则表达式
- 黑马程序员 Java基础 集合
- 深入了解scanf/getchar/gets/cin等函数
- UIFont的字体调研
- 黑马程序员 Java基础 集合2
- Kaggle now has 100K data scientists, but what's a data scientist?
- 黑马程序员 Java基础 正则表达式
- 八种基本排序(1)
- 黑马程序员 Java基础 异常
- 几种图形打印基于C++IO流操作
- json解析出来的数据库是字典和数组的组合,创建一个model来接收解析数据
- Ambari server安装步骤及问题解决
- 黑马程序员 Java基础 IO
- Servlet
- swift -函数、函数指针