A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© major2015 中级黑马   /  2015-4-12 17:15  /  371 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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、切割

按照多个空格来进行切割
  1. String str="zhangsan   lisi wnagwu  zhaoliu";
  2. String reg=" +";//一个或多个
  3. String[] arr=str.split(reg);

  4. //对于以“.”分割的字符串,要添加两个反斜杠,因为“\*”,表达正则中的点,再加个反斜杠对上一个反斜杠转义。
  5. String str="\\.";

  6. String str="c:\\abc\\a.txt";
  7. //切割"\\"
  8. String reg="\\\\";
  9. String[] arr=str.split(reg);
  10. String str="erkktykkuio";
  11. //按照叠词切
  12. String reg="[(.)\\1]";
  13. //“()”组,让规则的结果被重用,组的出现都有编号,从1开始(组零始终代表整个表达式),重用组用“\n”来引用(n为编号)
  14. //String[] arr=str.split(reg);
复制代码



如果四个叠词一起呢?
正则弊端:阅读性极差

3、替换
  1. String str="wq234pr499324if454jlk6546afjka";
  2. //要求:将字符串中的数字替换成“#”;
  3. String reg="\\d{5,}";
  4. str=str.replaceAll(reg,"#");

  5. String str="erkktykkuio";
  6. //要求:将叠词替换成“#”( 不能使用“$”)
  7. String reg="(.)\\1+";//出现一次或多次
  8. str=str.replaceAll(reg,"#");
  9. //要求:将重叠的替换成单个字母
  10. String reg="(.)\\1+";
  11. str=str.replaceAll(reg,"$1");//“$1”替换前一个规则中的第一个组
复制代码




4、获取 substring()
将字符串中符合规则的子串取出
步骤:
1、将正则表达式封装成对象
2、让对象和要操作的字符串关联
3、关联后后去正则匹配引擎
4、通过引擎对符合规则的子串进行操作
导包java.util.regex.*;

  1. String str="ming tian jiu yao fang jia le, da jia.";
  2. //要求:将连续的三个字母取出
  3. String reg="[a-z]{3}";  //错误的
  4. Pattern p=Pattern.cpmplie(reg);
  5. Matcher m=p.matcher(str);
  6. //boolean b=m.matches();//String类中的machers()用的就是Pattern和Machr来完成的。
  7. boolean b=m.find();//将规则作用到字符串,进行符合规则的子串查找
  8. m.group();
  9. /*先find(),再gruop()
  10. while(m.find()){
  11.         System.out.println(m.group());
  12.         System.out.println(m.start()+"..."+m.end());//显示字符所在位置
  13. }
  14. */
复制代码



边界匹配器
^行的开头
$行的结尾
\b单词边界
\B非单词边界
\A输入的开头
\G上一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符(如果有的话)
\z输入的结尾
  1. reg="\\b[a-z]{3}\\b";  //正确的
复制代码













0 个回复

您需要登录后才可以回帖 登录 | 加入黑马