Skip to content

Latest commit

 

History

History
109 lines (81 loc) · 5.28 KB

Pattern.md

File metadata and controls

109 lines (81 loc) · 5.28 KB

#正则表达式

##字符

字符 解释
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\)"。