#正则表达式
##字符
字符 | 解释 |
---|---|
c | 字符c |
\t | 制表符 |
\n | 换行符 |
\r | 回车符 |
\f | 换页符 |
\a | 警告符 |
\e | 逃逸符 |
##字符类
字符类 | 解释 |
---|---|
[ABC...] | 任何由A,B,C,...表示的字符,其中A可以是多个字符、字符范围或字符类 |
[^...] | 字符类的补集 |
[...&&...] | 两个字符集的交集 |
##预定义字符类
预定义字符类 | 含义 |
---|---|
. | 任意一个字符 |
\d | 一个数字[0-9] |
\D | 一个非数字[^0-9] |
\s | 一个空白字符[\t\n\r\f\x0B] |
\S | 一个非空白字符 |
\w | 一个词语字符[a-zA-Z0-9_] |
\W | 一个非词语字符 |
##边界匹配符
边界匹配符 | 解释 |
---|---|
^ | 匹配输入字符串开始的位置,或者在多行模式下,^也匹配\n或\r之后的位置 |
$ | 匹配输入字符串结尾的位置,或者在多行模式下,$也匹配\n或\r之前的位置 |
\A | 指定匹配必须出现在字符串的开头(忽略Multiline选项) |
\z | 指定匹配必须出现在字符串的结尾(忽略Multiline选项) |
\Z | 指定匹配必须出现在字符串的结尾或字符串的结尾\n之前(忽略Multiline选项) |
\G | 前一个匹配的结尾 |
\b | 一个词语边界 |
\B | 一个非词语边界 |
##量词
量词 | 解释 |
---|---|
X? | 可选的X |
X* | X重复0或者多次 |
X+ | X重复1或者多次 |
X{n} | X重复n次(x=n) |
X{n,} | X重复至少n次(x>=n) |
X{n,m} | X重复n到m次之间(n<=x<=m) |
##量词后缀
量词后缀 | 解释 |
---|---|
? | 将默认(贪婪)匹配转变为勉强匹配 |
-
| 将默认(贪婪)匹配转变为占有匹配
##集合操作
集合操作 | 解释 |
---|---|
XY | 任何X中的字符串,后面跟随任何Y中的字符串 |
X | Y |
#正则表达式语法 参考:http://www.runoob.com/java/java-regular-expressions.html
字符 | 说明 |
---|---|
\ | 转义符 |
^ | 匹配输入字符串开始的位置。如果设置了RegExp对象的Multiline属性,^还会与"\n"或"\r"之后的位置匹配 |
$ | 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配 |
-
| 零次或多次匹配前面的<font color=red>字符或子表达式</font>。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。
-
| 一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。
? | 零次或一次匹配前面的字符或子表达式。例如,"do(es)?"匹配"do"或"does"中的"do"。? 等效于 {0,1}。 {n} | n 是非负整数。正好匹配 n 次。例如,"o{2}"与"Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。 {n,} | n 是非负整数。至少匹配 n 次。 {n,m} | n,m是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。注意:不能将空格插入逗号和数字之间。 ? | 当此字符紧随任何其他限定符(*,+,?,{n},{n,},{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配到的搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。 . | 匹配除"\r\n"之外的任何单个字符。若要匹配包括"\r\n"在内的任意字符,请使用诸如"[\s\S]"之类的模式。 x|y | 匹配 x 或 y。例如,'z|food' 匹配"z"或"food"。'(z|f)ood' 匹配"zood"或"food"。 [xyz] | 字符集。匹配包含的任一字符。例如,"[abc]"匹配"plain"中的"a"。 [^xyz] | 反向字符集。匹配未包含的任何字符。例如,"[^abc]"匹配"plain"中"p","l","i","n"。 [a-z] | 字符范围。匹配指定范围内的任何字符。例如,"[a-z]"匹配"a"到"z"范围内的任何小写字母。 [^a-z] | 反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。 \b | 匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"。 \B | 非字边界匹配。"er\B"匹配"verb"中的"er",但不匹配"never"中的"er"。
##Java 注意事项:
根据Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为Unicode转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式收到保护,不被Java字节码编译器解释。例如,当解释为正则表达式时,字符串字面值"\b"与单个退格字符匹配,而"\b"与单词边界匹配。字符串字面值"(hello)"是非法的,将导致编译时错误;要与字符串(hello)匹配,必须使用字符串字面值"\(hello\)"。