Java正则表达式入门
众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时
又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,
便成了解决这一矛盾的主要手段。
大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例
如字符 a 到 z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或
多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
自从 jdk1.4 推出 java.util.regex 包,就为我们提供了很好的 JAVA 正则表达式应用平台。
因为正则表达式是一个很庞杂的体系,所以我仅例举些入门的概念,更多的请参阅相关书籍及自行摸索。
\\ 反斜杠
\t 间隔 ('\u0009')
\n 换行 ('\u000A')
\r 回车 ('\u000D')
\d 数字 等价于[0-9]
\D 非数字 等价于[^0-9]
\s 空白符号 [\t\n\x0B\f\r]
\S 非空白符号 [^\t\n\x0B\f\r]
\w 单独字符 [a-zA-Z_0-9]
\W 非单独字符 [^a-zA-Z_0-9]
\f 换页符
\e Escape
\b 一个单词的边界
\B 一个非单词的边界
\G 前一个匹配的结束
^为限制开头
^java 条件限制为以 Java 为开头字符
$为限制结尾
java$ 条件限制为以 java 为结尾字符
.为限制一个任意字符
java.. 条件限制为 java 后除换行外任意两个字符
加入特定限制条件「[]」
[a-z] 条件限制在小写 a to z 范围中一个字符
[A-Z] 条件限制在大写 A to Z 范围中一个字符
[a-zA-Z] 条件限制在小写 a to z 或大写 A to Z 范围中一个字符
[0-9] 条件限制在小写 0 to 9 范围中一个字符
[0-9a-z] 条件限制在小写 0 to 9 或 a to z 范围中一个字符
[0-9[a-z]] 条件限制在小写 0 to 9 或 a to z 范围中一个字符(交集)
[]中加入^后加再次限制条件「[^]」
[^a-z] 条件限制在非小写 a to z 范围中一个字符
[^A-Z] 条件限制在非大写 A to Z 范围中一个字符
[^a-zA-Z] 条件限制在非小写 a to z 或大写 A to Z 范围中一个字符
[^0-9] 条件限制在非小写 0 to 9 范围中一个字符
[^0-9a-z] 条件限制在非小写 0 to 9 或 a to z 范围中一个字符
[^0-9[a-z]] 条件限制在非小写 0 to 9 或 a to z 范围中一个字符(交集)
在限制条件为特定字符出现 0 次以上时,可以使用「*」
J* 0 个以上 J
.* 0 个以上任意字符
J.*D J 与 D 之间 0 个以上任意字符
在限制条件为特定字符出现 1 次以上时,可以使用「+」
J+ 1 个以上 J
.+ 1 个以上任意字符
J.+D J 与 D 之间 1 个以上任意字符
在限制条件为特定字符出现有 0 或 1 次以上时,可以使用「?」
JA? J 或者 JA 出现
限制为连续出现指定次数字符「{a}」
J{2} JJ
J{3} JJJ
文字 a 个以上,并且「{a,}」
J{3,} JJJ,JJJJ,JJJJJ,???(3 次以上 J 并存)
文字个以上,b 个以下「{a,b}」
J{3,5} JJJ 或 JJJJ 或 JJJJJ
两者取一「|」
J|A J 或 A
Java|Hello Java 或 Hello
「()」中规定一个组合类型
比 如 , 我 查 询 index 中 间 的 数 据 , 可 写 作
(.+?)
在使用 Pattern.compile 函数时,可以加入控制正则表达式的匹配行为的参数:
Pattern Pattern.compile(String regex, int flag)
flag 的取值范围如下:
Pattern.CANON_EQ 当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情
况下,才认定匹配。比如用了这个标志之后,表达式"a\u030A"会匹配"?"。默认情况下,不考虑"规范相
等性(canonical equivalenc
1