Java正则表达式规则

字符 示意
\ 下一字符特殊转义
^ 匹配开始位置
$ 匹配结束位置
* 0次或者多次
+ 1次或者多次
? 0次或者一次
{n} 非负数整数,n次
{n,} 非负数整数,n次及以上
? 当此字符在他限定符(*、+、?、{n}、{n,}、{n,m})之后时,尽量匹配较少的字符
(pattern) 匹配子表达式,如需使用()可以使用\转意
(?:pattern) 与前字符或匹配,如industr(?:y|ies)等价于’industry|industries’
(?=pattern) 与前字符连接匹配,如’Windows(?=95|98|NT|2000)’可以匹配Windows95
(?!pattern) 与前字符非匹配,如’Windows(?=95|98|NT|2000)’不能匹配匹配Windows95
x|y 或匹配,匹配x或y
[xyz] 字符集,字符中任意一个
[^xyz] 反向字符集,匹配未包含的任何字符
[a-z] 字符范围
[^a-z] 反字符范围
\b 匹配边界字符,例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"
\B 匹配非边界字符,例如,"er\B"匹配"verb"中的"er",但不匹配"never"中的"er"。
\d 数字匹配等价于[0-9]
\D 非数字字符匹配。等价于[^0-9]
\f 换页符匹配。等价于\x0c和\cL
\n 换行符匹配。等价于\x0a和\cJ。
\r 匹配一个回车符。等价于\x0d和\cM
\s 匹配任何空白字符,包括空格、制表符、换页符等。与[\f\n\r\t\v]等价。
\S 匹配任何非空白字符。与[^\f\n\r\t\v]等价。
\t 制表符匹配,与\x09和\cI等价
\v 垂直制表符匹配。与\x0b和\cK等价。
\w 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等价。
\W 与任何非单词字符匹配。与"[^A-Za-z0-9_]"等价。
\num 匹配num,此处的num是一个正整数。到捕获匹配的反向引用。例如,"(.)\1"匹配两个连续的相同字符。
\n 标识一个八进制转义码或反向引用。如果\n前面至少有n个捕获子表达式,那么n是反向引用。否则,如果n是八进制数(0-7),那么n是八进制转义码。
\nm 标识一个八进制转义码或反向引用。如果\nm前面至少有nm个捕获子表达式,那么nm是反向引用。如果\nm前面至少有n个捕获,则n是反向引用,后面跟有字符m。如果两种前面的情况都不存在,则\nm匹配八进制值nm,其中n和m是八进制数字(0-7)。
\nml 当n是八进制数(0-3),m和l是八进制数(0-7)时,匹配八进制转义码nml。
\un 匹配n,其中n是以四位十六进制数表示的Unicode字符。例如,\u00A9匹配版权符号(©)。

常用的相关方法:

//判断是否匹配
Pattern.matches([正则表达式], [文本])

// 按指定模式在字符串查找
String line = "foxhome.top/3000.html?title=hh";
//定义了三个正则表达式匹配组
String pattern = "(\\D*)(\\d+)(.*)";
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
if (m.find( )) {
    //第一个为全部的匹配结果,其余为正则表达式组结果
    System.out.println("value1: " + m.group(0) );
    System.out.println("value2: " + m.group(1) );
    System.out.println("value3: " + m.group(2) );
    System.out.println("value4: " + m.group(3) );
} else {
    System.out.println("no match");
}

发表评论

CAPTCHAis initialing...