Java中的正则表达式
正则表达式:就是字符串中字符出现的规则。
何时使用:验证一个字符串的格式/查找一篇文章中的关键字。
基本正则表达式:
- 最简单的正则表达式,就是关键词本身,如:”和谐”,”政府”等。
- 包含模式匹配符号的正则表达式。如:
正则表达式:”[a-z]”表示a到z的任意一个字符
正则表达式:”[a-z]+”表示由一个或多个a-z字符组成的字符串
如:我[去草],可以匹配:我去,我草;但不能匹配:我去草。
我[去草]+,可以匹配:我去,我草,我去草,我草草,我去去等
- 字符集合
-
正则表达式 说明 [abc] a、b、c中任意一个字符 [^abc] 除了a、b、c的任意字符 [a-z] a、b、c、...、z中任意的一个字符 [a-zA-Z0-9] a~z、A~Z、0~9中任意一个字符 [0-9&&[^47]] 0~9中除了4和7以外的任意一个字符,其中&&表示”与”的关系
注意:^仅在放在首位时代表除……之外,如果给^前加上其他字符,则其失效,变为普通字符;如:正则表达式”[12^34]”表示1、2、^、3、4中的任意一个字符而不是1、2或除3、4外的字符。
- 预定义字符集
预定义字符集:就是将常用正则表达式简化为预定义的专门字符,即简化正则表达式用的特殊字符。
-
正则表达式 说明 . 任意一个字符 \d 任意一个数字字符,相当于[0-9] \w 单词字符,相当于[a-zA-Z0-9_] \s 空白字符,相当于[\t\n\x0B\f\r] \D 非数字字符 \W 非单词字符 \S 非空白字符
注意:空白字符并不只是指空格,还包括制表符等。
- 数量词
-
正则表达式 说明 X? 表示0个或1个X,如:我了?去 X* 表示0个或任意多个X,如:我[了个]*去 X+ 表示1个到任意多个X(大于等于1个X) X{n} 表示n个X X{n,} 表示n个到任意多个X(大于等于n个X) X{n,m} 表示n个到m个X(含头含尾)
如:QQ号码目前为5-12位的数字,验证QQ号码的正则表达式应该为:"\d{5,12}"。
座机号:3-4位区号,后跟-,后跟7-8位座机号,故验证座机号的正则表达式应该为:"\d{3,4}-\d{7,8}"。
- 表达式分组
分组:使用圆括号()分割正则表达式为多个子表达式。子表达式构成一个小整体。
为什么要对正则表达式分组?和数学公式一样。数学中的复杂公式,都会用圆括号分组公式中的各个部分,表示公式的逻辑结构,并控制计算的顺序。
什么时候使用?当正则表达式过于复杂,需要区分逻辑结构、避免歧义时。
如:检索手机号码:+86 13501234567
+86 可有可无 ?
+86与后面的号码之间空格可以没有或者有多个 *
电话号码为11位数字
故检索手机号码的正则表达式为:"(\+86)?\s*\d{11}"。
分组时可以使用 ”|” 表示 ”或” 关系,例如:匹配手机号码前面的区号:
(\+86|0086)表示:可以匹配”+86”或者”0086”