java正则
1.字符
x
\\
(与行结束符可能匹配也可能不匹配)
\d
\D
\s
\S
\w
\W
4.POSIX 字符类(仅 US-ASCII)(注意反斜杠要写两次,例如\p{Lower}写为\\p{Lower})
\p{Lower}
\p{Upper}
\p{ASCII}
\p{Alpha}
\p{Digit}
\p{Alnum}
\p{Punct}
\p{Graph}
\p{Print}
\p{Blank}
\p{Cntrl}
\p{XDigit}
\p{Space}
5.java.lang.Character 类(简单的 java 字符类型)
\p{javaLowerCase}
\p{javaUpperCase}
\p{javaWhitespace}
\p{javaMirrored}
6.Unicode 块和类别的类
\p{InGreek}
\p{Lu}
\p{Sc}
\P{InGreek}
[\p{L}&&[^\p{Lu}]]
7.边界匹配器
^
$
\b
\B
\A
\G
\Z
行结束符 是一个或两个字符的序列,标记输入字符序列的行结尾。
以下代码被识别为行结束符:
‐新行(换行)符 ('\n')、
‐后面紧跟新行符的回车符 ("\r\n")、
‐单独的回车符 ('\r')、
‐下一行字符 ('\u0085')、
‐行分隔符 ('\u2028') 或
‐段落分隔符 ('\u2029)。
\z
当编译模式时,可以设置一个或多个标志,例如
Pattern pattern = Pattern.compile(patternString,Pattern.CASE_INSENSITIVE + Pattern.UNICODE_CASE);
下面六个标志都是支持的:
‐CASE_INSENSITIVE:匹配字符时与大小写无关,该标志默认只考虑US ASCII字符。
‐UNICODE_CASE:当与CASE_INSENSITIVE结合时,使用Unicode字母匹配
‐MULTILINE:^和$匹配一行的开始和结尾,而不是整个输入
‐UNIX_LINES: 当在多行模式下匹配^和$时,只将'\n'看作行终止符
‐DOTALL: 当使用此标志时,.符号匹配包括行终止符在内的所有字符
‐CANON_EQ: 考虑Unicode字符的规范等价
8.Greedy 数量词
X?
X*
X+
X{n}
X{n,}
X{n,m}
9.Reluctant 数量词
X??
X*?
X+?
X{n}?
X{n,}?
X{n,m}?
10.Possessive 数量词
X?+
X*+
X++
X{n}+
X{n,}+
X{n,m}+
Greedy,Reluctant,Possessive的区别在于:(注意仅限于进行.等模糊处理时)
greedy量词被看作“贪婪的”,因为它第一次就读入整个被模糊匹配的字符串。如果第一个匹配尝试(整个输入字符串)失败,匹配器就会在被匹配字符串中的最后一位后退一个字符并且再次尝试,重复这个过程,直到找到匹配或者没有更多剩下的字符可以后退为止。根据表达式中使用的量词,它最后试图匹配的内容是1 个或者0个字符。
但是,reluctant量词采取相反的方式:它们从被匹配字符串的开头开始,然后逐步地一次读取一个字符搜索匹配。它们最后试图匹配的内容是整个输入字符串。
最后,possessive量词总是读完整个输入字符串,尝试一次(而且只有一次)匹配。和greedy量词不同,possessive从不后退。
11.Logical 运算符
XY
X|Y
(X)
12.Back 引用
\n
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C)))中,存在四个这样的组:
1
2
3
4
在表达式中可以通过\n来对相应的组进行引用,例如(ab)34\1就表示ab34ab,(ab)34(cd)\1\2就表示ab34cdabcd。
13.引用
\
\Q
可以匹配ab{|}\\
\E
14.特殊构造(非捕获)
(?:X)
(?idmsux-idmsux)
idmsux说明如下:
‐i CASE_INSENSITIVE :US-ASCII 字符集不区分大小写。(?i)
‐d UNIX_LINES : 打开UNIX换行符
‐m MULTILINE :多行模式(?m)
UNIX下换行为\n
WINDOWS下换行为\r\n(?s)
‐u UNICODE_CASE : Unicode 不区分大小写。(?u)
‐x COMMENTS :可以在pattern里面使用注解,忽略pattern里面的whitespace,以及"#"一直到结尾(#后面为注解)。(?x)例如(?x)abc#asfsdadsa可以匹配字符串abc
(?idmsux-idmsux:X)
(?=X)
(?!X)
(?<=X)
(? (?>X)
(?=X)与(?>X)的区别在于(?>X)是不回溯的。例如被匹配的字符串为abcm
当表达式为a(?:b|bc)m是可以匹配的,而当表达式是a(?>b|bc)时是不能匹配的,因为当后者匹配到b时,由于已经匹配,就跳出了非捕获组,而不再次对组内的字符进行匹配。可以加快速度。
-------本文转自新浪博客