本帖最后由 major2015 于 2015-4-12 17:15 编辑
正则表达式功能
1、匹配 String类的matches()
字符 | x | 字符 x | \\ | 反斜线字符 | \0n | 带有八进制值 0 的字符 n (0 <= n <= 7) | \0nn | 带有八进制值 0 的字符 nn (0 <= n <= 7) | \0mnn | 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) | \xhh | 带有十六进制值 0x 的字符 hh | \uhhhh | 带有十六进制值 0x 的字符 hhhh | \t | 制表符 ('\u0009') | \n | 新行(换行)符 ('\u000A') | \r | 回车符 ('\u000D') | \f | 换页符 ('\u000C') | \a | 报警 (bell) 符 ('\u0007') | \e | 转义符 ('\u001B') | \cx | 对应于 x 的控制符
|
字符类 | [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](减去) | | 预定义字符类 | . | 任何字符(与行结束符可能匹配也可能不匹配) | \d | 数字:[0-9] | \D | 非数字: [^0-9] | \s | 空白字符:[ \t\n\x0B\f\r] | \S | 非空白字符:[^\s] | \w | 单词字符:[a-zA-Z_0-9] | \W | 非单词字符:[^\w] |
Greedy 数量词 | X? | X,一次或一次也没有 | X* | X,零次或多次 | X+ | X,一次或多次 | X{n} | X,恰好 n 次 | X{n,} | X,至少 n 次 | X{n,m} | X,至少 n 次,但是不超过 m 次 |
2、切割
按照多个空格来进行切割
- String str="zhangsan lisi wnagwu zhaoliu";
- String reg=" +";//一个或多个
- String[] arr=str.split(reg);
- //对于以“.”分割的字符串,要添加两个反斜杠,因为“\*”,表达正则中的点,再加个反斜杠对上一个反斜杠转义。
- String str="\\.";
- String str="c:\\abc\\a.txt";
- //切割"\\"
- String reg="\\\\";
- String[] arr=str.split(reg);
- String str="erkktykkuio";
- //按照叠词切
- String reg="[(.)\\1]";
- //“()”组,让规则的结果被重用,组的出现都有编号,从1开始(组零始终代表整个表达式),重用组用“\n”来引用(n为编号)
- //String[] arr=str.split(reg);
复制代码
如果四个叠词一起呢?
正则弊端:阅读性极差
3、替换
- String str="wq234pr499324if454jlk6546afjka";
- //要求:将字符串中的数字替换成“#”;
- String reg="\\d{5,}";
- str=str.replaceAll(reg,"#");
- String str="erkktykkuio";
- //要求:将叠词替换成“#”( 不能使用“$”)
- String reg="(.)\\1+";//出现一次或多次
- str=str.replaceAll(reg,"#");
- //要求:将重叠的替换成单个字母
- String reg="(.)\\1+";
- str=str.replaceAll(reg,"$1");//“$1”替换前一个规则中的第一个组
复制代码
4、获取 substring()
将字符串中符合规则的子串取出
步骤:
1、将正则表达式封装成对象
2、让对象和要操作的字符串关联
3、关联后后去正则匹配引擎
4、通过引擎对符合规则的子串进行操作
导包java.util.regex.*;
- String str="ming tian jiu yao fang jia le, da jia.";
- //要求:将连续的三个字母取出
- String reg="[a-z]{3}"; //错误的
- Pattern p=Pattern.cpmplie(reg);
- Matcher m=p.matcher(str);
- //boolean b=m.matches();//String类中的machers()用的就是Pattern和Machr来完成的。
- boolean b=m.find();//将规则作用到字符串,进行符合规则的子串查找
- m.group();
- /*先find(),再gruop()
- while(m.find()){
- System.out.println(m.group());
- System.out.println(m.start()+"..."+m.end());//显示字符所在位置
- }
- */
复制代码
边界匹配器 | ^ | 行的开头 | $ | 行的结尾 | \b | 单词边界 | \B | 非单词边界 | \A | 输入的开头 | \G | 上一个匹配的结尾 | \Z | 输入的结尾,仅用于最后的结束符(如果有的话) | \z | 输入的结尾 |
- reg="\\b[a-z]{3}\\b"; //正确的
复制代码
|
|