正则表达式

来源:互联网 发布:唐筛检查结果数据分析 编辑:程序博客网 时间:2024/06/06 03:06
  • QQ号的判断:[1-9][0-9]{4,10}或者[1-9]\d{4,10}
    • 第一位是1-9其中的数字,第二位是0到9的数字,规则复用4-10次。意思QQ可以是5到11位 。两个反斜杠是因为java中会把一个\当成转义字符。
  • 电话号的判断:1[3,5,7,8][0-9]{9}
    • 第一位是1,第二位是3或者5或者7或者8,剩下的规则(一个数字)复用9次。
  • 空格的判断:” +”
    • 一个或者多个空格
  • 邮箱的判断:[a-zA-Z0-9_]+@[a-zA-Z]+\.[a-zA-Z]{2,}
    • 第一位是字母数字或者下划线,可以出现一次或者多次。接着出现的是@,接着又是一次或者多次的字母,接着是一个.接着出现至少两次的字母。如果\.[a-zA-Z]{2,}变为(\.[a-zA-Z]{2,}){1,}表示(.至少两个字母)至少一次

字符

x —————字符 x
\\ —————反斜线字符
\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 的控制符

字符类

[abc] —————a、b 或 c(简单类)
[^abc] —————任何字符,除了 a、b 或 c(否定)
[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](减去)

预定义字符类

. —————任何字符(与行结束符可能匹配也可能不匹配)
\d —————数字:[0-9]
\D —————非数字: [^0-9]
\s —————空白字符:[ \t\n\x0B\f\r]
\S —————非空白字符:[^\s]
\w —————单词字符:[a-zA-Z_0-9]
\W —————非单词字符:[^\w]

POSIX 字符类(仅 US-ASCII)

\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]

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()

Unicode 块和类别的类

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

边界匹配器

^ —————行的开头
$ —————行的结尾
\b —————单词边界
\B —————非单词边界
\A —————输入的开头
\G —————上一个匹配的结尾
\Z —————输入的结尾,仅用于最后的结束符(如果有的话)
\z —————输入的结尾

Greedy 数量词

X? —————X ,一次或一次也没有
X* —————X ,零次或多次
X+—————X ,一次或多次
X{n}—————X ,恰好 n 次
X{n,}—————X ,至少 n 次
X{n,m}—————X ,至少 n 次,但是不超过 m 次

Reluctant 数量词

X?? —————X ,一次或一次也没有
X*? —————X ,零次或多次
X+?—————X ,一次或多次
X{n}?—————X ,恰好 n 次
X{n,}? —————X ,至少 n 次
X{n,m}? —————X ,至少 n 次,但是不超过 m 次

反斜线、转义和引用
反斜线字符 (‘\’) 用于引用转义构造,如上表所定义的,同时还用于引用其他将被解释为非转义构造的字符。因此,表达式 \ 与单个反斜线匹配,而 { 与左括号匹配。

在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的。可以在非字母字符前使用反斜线,不管该字符是否非转义构造的一部分。

根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。例如,当解释为正则表达式时,字符串字面值 “\b” 与单个退格字符匹配,而 “\b” 与单词边界匹配。字符串字面值 “(hello)” 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 “\(hello\)”。

字符类
字符类可以出现在其他字符类中,并且可以包含并集运算符(隐式)和交集运算符 (&&)。并集运算符表示至少包含其某个操作数类中所有字符的类。交集运算符表示包含同时位于其两个操作数类中所有字符的类。

字符类运算符的优先级如下所示,按从最高到最低的顺序排列:

1 字面值转义 \x
2 分组 […]
3 范围 a-z
4 并集 [a-e][i-u]
5 交集 [a-z&&[aeiou]]

0 0
原创粉丝点击