1.字符

x    字符 x。例如a表示字符a
\\   
反斜线字符。在书写时要写为\\\\。(注意:因为java在第一次解析时,把\\\\解析成正则表达式\\,在第二次解析时再解析为\,所以凡是不是1.1列举到的转义字符,包括1.1的\\,而又带有\的都要写两次)
\0n   
带有八进制值 0的字符 n (0 <= n <= 7)
\0nn    带有八进制值 0的字符 nn (0 <= n <=
7)
\0mnn    带有八进制值 0的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh   
带有十六进制值 0x的字符 hh
\uhhhh    带有十六进制值 0x的字符 hhhh
\t    制表符
('\u0009')
\n    新行(换行)符 ('\u000A')
\r    回车符 ('\u000D')
\f    换页符
('\u000C')
\a    报警 (bell) 符 ('\u0007')
\e    转义符 ('\u001B')
\cx    对应于
x 的控制符

2.字符类
[abc]    a、b或 c(简单类)。例如[egd]表示包含有字符e、g或d。
[^abc]   
任何字符,除了 a、b或 c(否定)。例如[^egd]表示不包含字符e、g或d。
[a-zA-Z]    a到 z或 A到
Z,两头的字母包括在内(范围)
[a-d[m-p]]    a到 d或 m到
p:[a-dm-p](并集)
[a-z&&[def]]    d、e或 f(交集)
[a-z&&[^bc]]   
a到 z,除了 b和 c:[ad-z](减去)
[a-z&&[^m-p]]    a到 z,而非 m到
p:[a-lq-z](减去)

3.预定义字符类(注意反斜杠要写两次,例如\d写为\\d)任何字符

(与行结束符可能匹配也可能不匹配) \d

数字:[0-9] \D

非数字: [^0-9] \s

空白字符:[ \t\n\x0B\f\r] \S

非空白字符:[^\s] \w

单词字符:[a-zA-Z_0-9] \W

非单词字符:[^\w]

4.POSIX 字符类(仅
US-ASCII)(注意反斜杠要写两次,例如\p{Lower}写为\\p{Lower})
\p{Lower}   
小写字母字符:[a-z]。
\p{Upper}    大写字母字符:[A-Z]
\p{ASCII}    所有
ASCII:[\x00-\x7F]
\p{Alpha}    字母字符:[\p{Lower}\p{Upper}]
\p{Digit}   
十进制数字:[0-9]
\p{Alnum}    字母数字字符:[\p{Alpha}\p{Digit}]
\p{Punct}   
标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph}   
可见字符:[\p{Alnum}\p{Punct}]
\p{Print}    可打印字符:[\p{Graph}\x20]
\p{Blank}   
空格或制表符:[ \t]
\p{Cntrl}    控制字符:[\x00-\x1F\x7F]
\p{XDigit}   
十六进制数字:[0-9a-fA-F]
\p{Space}    空白字符:[
\t\n\x0B\f\r]
5.java.lang.Character 类(简单的 java
字符类型)
\p{javaLowerCase}    等效于
java.lang.Character.isLowerCase()
\p{javaUpperCase}    等效于
java.lang.Character.isUpperCase()
\p{javaWhitespace}    等效于
java.lang.Character.isWhitespace()
\p{javaMirrored}    等效于
java.lang.Character.isMirrored()
6.Unicode
块和类别的类

\p{InGreek}    Greek 块(简单块)中的字符
\p{Lu}   
大写字母(简单类别)
\p{Sc}    货币符号
\P{InGreek}    所有字符,Greek
块中的除外(否定)
[\p{L}&&[^\p{Lu}]]     所有字母,大写字母除外(减去)

7.边界匹配器
^   
行的开头,请在正则表达式的开始处使用^。例如:^(abc)表示以abc开头的字符串。注意编译的时候要设置参数MULTILINE,如 Pattern p =
Pattern.compile(regex,Pattern.MULTILINE);
$   
行的结尾,请在正则表达式的结束处使用。例如:(^bca).*(abc$)表示以bca开头以abc结尾的行。
\b   
单词边界。例如\b(abc)表示单词的开始或结束包含有abc,(abcjj、jjabc 都可以匹配)
\B   
非单词边界。例如\B(abc)表示单词的中间包含有abc,(jjabcjj匹配而jjabc、abcjj不匹配)
\A    输入的开头
\G   
上一个匹配的结尾(个人感觉这个参数没什么用)。例如\\Gdog表示在上一个匹配结尾处查找dog如果没有的话则从开头查找,注意如果开头不是dog则不能匹配。
\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,零次或多次
X+    X,一次或多次
X{n}    X,恰好 n 次
X{n,}    X,至少 n 次
X{n,m}   
X,至少 n 次,但是不超过 m 次

9.Reluctant 数量词
X??    X,一次或一次也没有
X*?   
X,零次或多次
X+?    X,一次或多次
X{n}?    X,恰好 n 次
X{n,}?    X,至少 n

X{n,m}?    X,至少 n 次,但是不超过 m 次
10.Possessive
数量词

X?+    X,一次或一次也没有
X*+    X,零次或多次
X++   
X,一次或多次
X{n}+    X,恰好 n 次
X{n,}+    X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超过
m 次
Greedy,Reluctant,Possessive的区别在于:(注意仅限于进行.等模糊处理时)
greedy量
词被看作“贪婪的”,因为它第一次就读入整个被模糊匹配的字符串。如果第一个匹配尝试(整个输入字符串)失败,匹配器就会在被匹配字符串中的最后一位后退一个字符并且再次尝试,重复这个过程,直到找到匹配或者没有更多剩下的字符可以后退为止。根据表达式中使用的量词,它最后试图匹配的内容是1
个或者0个字符。
但是,reluctant量词采取相反的方式:它们从被匹配字符串的开头开始,然后逐步地一次读取一个字符搜索匹配。它们最后试图匹配的内容是整个输入字符串。
最后,possessive量词总是读完整个输入字符串,尝试一次(而且只有一次)匹配。和greedy量词不同,possessive从不后退。
11.Logical
运算符
XY    X 后跟 Y
X|Y    X 或 Y
(X)   
X,作为捕获组。例如(abc)表示把abc作为一个整体进行捕获
12.Back 引用
\n    任何匹配的
nth捕获组
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C)))中,存在四个这样的组:
1       
((A)(B(C)))
2        \A
3        (B(C))
4       
(C)
在表达式中可以通过\n来对相应的组进行引用,例如(ab)34\1就表示ab34ab,(ab)34(cd)\1\2就表示ab34cdabcd。

13.引用
\    Nothing,但是引用以下字符
\Q    Nothing,但是引用所有字符,直到
\E。QE之间的字符串会原封不动的使用(1.1中转义字符的除外)。例如, ab\\Q{|}\\\\E
可以匹配ab{|}\\
\E   
Nothing,但是结束从 \Q开始的引用
14.特殊构造(非捕获)
(?:X)   
X,作为非捕获组
(?idmsux-idmsux)     Nothing,但是将匹配标志由 on 转为 off。比如:表达式
(?i)abc(?-i)def 这时,(?i) 打开不区分大小写开关,abc 匹配
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,作为带有给定标志 on - off 的非捕获组。与上面的类似,上面的表达式,可以改写成为:(?i:abc)def,或者
(?i)abc(?-i:def)
(?=X)    X,通过零宽度的正 lookahead。零宽度正先行断言,仅当子表达式 X 在
此位置的右侧匹配时才继续匹配。例如,\w+(?=\d) 表示字母后面跟数字,但不捕获数字(不回溯)
(?!X)    X,通过零宽度的负
lookahead。零宽度负先行断言。仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如,\w+(?!\d)
表示字母后面不跟数字,且不捕获数字。
(?<=X) X,通过零宽度的正 lookbehind。零宽度正后发断言。仅当子表达式 X 在
此位置的左侧匹配时才继续匹配。例如,(?<=19)99 表示99前面是数字19,但不捕获前面的19。(不回溯)
(?<!x)    X,通过零宽度的负 lookbehind。零宽度负后发断言。仅当子表达式 X 不在此位置的左侧匹配时才继续匹配。例如,(?<!19)99 表示99前面不能是19,且不捕获前面的东东。

(?>X)   
X,作为独立的非捕获组(不回溯)
(?=X)与(?>X)的区别在于(?>X)是不回溯的。例如被匹配的字符串为abcm
当表达式为a(?:b|bc)m是可以匹配的,而当表达式是a(?>b|bc)时是不能匹配的,因为当后者匹配到b时,由于已经匹配,就跳出了非捕获组,而不再次对组内的字符进行匹配。可以加快速度。

注:本文转自http://www.blogjava.net/Werther/archive/2009/06/10/281198.html

Java正则表达式的解释说明的更多相关文章

  1. Java正则表达式入门——转自RUNOOB.COM

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  2. Java 正则表达式详解

    Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...

  3. 【转】java正则表达式

    在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...

  4. java正则表达式语法详解及其使用代码实例

    原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...

  5. JAVA 正则表达式 (超详细)

    (PS:这篇文章为转载,我不喜欢转载的但我觉得这篇文章实在是超赞了,就转了过来,这篇可以说是学习JAVA正则表达的必读篇.作者是个正真有功力的人,阅读愉快) 在Sun的Java JDK 1.40版本中 ...

  6. 转载:JAVA 正则表达式 (超详细)

    在Sun的JavaJDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用Java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu x ...

  7. java正则表达式学习笔记

    Java 正则表达式语法 为了更有效的使用正则表达式,需要了解正则表达式语法.正则表达式语法很复杂,可以写出非常高级的表达式.只有通过大量的练习才能掌握这些语法规则. 本篇文字,我们将通过例子了解正则 ...

  8. Java - 15 Java 正则表达式

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  9. Java正则表达式初学者使用法简介

    在Java中使用正则表达式的方法非常多,最简单的就是和字符串一起使用.对于Java正则表达式初学者,在String中有四个方法可以使用正则表达式,本文正是介绍这四个方法来使用正则表达式来处理文本数据. ...

随机推荐

  1. PHP禁止同一IP频繁访问以防止网站被防攻击或采集的代码

    PHP禁止同一IP频繁访问以防止网站被防攻击或采集的代码 <?php /* *通过禁止IP频繁访问防止网站被防攻击代码*design by www.scutephp.com*/header('C ...

  2. APS.net controller

    在controller 路由配置为: routes.MapRoute( name:"Default", url:"{controller}/{action}/{id}&q ...

  3. Flex 中画图工具(drawTool)失效

    做项目的时候画图工具突然失效,解决了半天都不行,最后将画图结束的函数map_drawEndHandler写在方法里面的时候,运行却能够画图了,不知道是什么原理,比较头疼,左思右想,都感觉有点怪怪的,虽 ...

  4. centos 安装 maven

    1: 下载 maven    我采用的是 apache-maven-3.3.9-bin.tar.gz http://maven.apache.org/download.cgi 2:  解压  tar ...

  5. MySQL 5.7版本sql_mode=only_full_group_by问题

    用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT l ...

  6. JS正则2

    正则表达式可以:•测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证•替换文本.可以在文档中使用一个正则表达式来标 ...

  7. Emmet (Zen Coding) HTML基本语法

    1. 嵌套操作---------- 子操作: > div>ul>li   并列:+ div+ul>li   上级:^ ul>li^div   ul>li>a^ ...

  8. 如何将红色区域数据调用解密函数直接打印到输出控制台(例如:crt控制台)

    int main(int argc, char *argv[]) { unsigned char data[PACKET_MAX_LEN]; int data_len = 0; int socket_ ...

  9. OAuth 2.0 Threat Model and Security Considerations (rfc6819)

    Authorization server The following data elements are stored or accessible on the authorization serve ...

  10. SQL SERVER 分页查询

    Sqlserver数据库分页查询一直是Sqlserver的短板. 但现在不是了. 自从有了它. 一口气上十楼. 官方语法说明示例: https://technet.microsoft.com/zh-c ...