Java程序设计(高级及专题)- 正则表达式

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

引用

| 语法 | 说明 |

| — | — |

| \ | Nothing,但是引用以下字符 |

| \Q | Nothing,但是引用所有字符,直到 \E |

| \E | Nothing,但是结束从 \Q 开始的引用 |

如:\Q\w+\E表示字符串\w+而不是正则中的单词字符:[a-zA-Z_0-9]。

其他

| 语法 | 说明 |

| — | — |

| \xhh | 十六进制值为0xhh的字符 |

| \uhhhh | 十六进制表示为0xhhhh的Unicode字符 |

| \t | 制表符Tab |

| \n | 换行符 |

| \r | 回车 |

| \f | 换页 |

| \e | 转义(Escape) |

处理选项

上面介绍了几个选项如忽略大小写,处理多行等,这些选项能用来改变处理正则表达式的方式。下面是Java中常用的正则表达式选项:

| 名称 | 说明 |

| — | — |

| CASE_INSENSITIVE | 匹配时区分大小写 |

| MULTILINE | 更改^$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.) |

| DOTALL | 在 dotall 模式中,表达式 . 可以匹配任何字符,包括行结束符。默认情况下,此表达式不匹配行结束符。 |

| UNICODE_CASE | 指定此标志后,由 CASE_INSENSITIVE 标志启用时,不区分大小写的匹配将以符合 Unicode Standard 的方式完成。默认情况下,不区分大小写的匹配假定仅匹配 US-ASCII 字符集中的字符。通过嵌入式标志表达式 (?u) 也可以启用 Unicode 感知的大小写折叠。指定此标志可能对性能产生影响。 |

| CANON_EQ | 启用规范等价。指定此标志后,当且仅当其完整规范分解匹配时,两个字符才可视为匹配。例如,当指定此标志时,表达式 “a\u030A” 将与字符串 “\u00E5” 匹配。默认情况下,匹配不考虑采用规范等价。不存在可以启用规范等价的嵌入式标志字符。指定此标志可能对性能产生影响。 |

| UNIX_LINES | 启用 Unix 行模式。在此模式中,.、^ 和 $ 的行为中仅识别 ‘\n’ 行结束符。通过嵌入式标志表达式 (?d) 也可以启用 Unix 行模式。 |

| LITERAL | 指定此标志后,指定模式的输入字符串就会作为字面值字符序列来对待。输入序列中的元字符或转义序列不具有任何特殊意义。标志 CASE_INSENSITIVE 和 UNICODE_CASE 在与此标志一起使用时将对匹配产生影响。其他标志都变得多余了。不存在可以启用字面值解析的嵌入式标志字符。 |

| UNICODE_CHARACTER_CLASS |   |

| COMMENTS | 模式中允许空白和注释。此模式将忽略空白和在结束行之前以 # 开头的嵌入式注释。通过嵌入式标志表达式 (?x) 也可以启用注释模式。 |

JAVA


基本用法

Pattern pattern = Pattern.compile(“\ba\w*\b”);

Matcher matcher = pattern.matcher(“abcdab cccabcd aaacd”);

int index = 0;

while (matcher.find()) {

String res = matcher.group();

System.out.println(index + “:” + res);

index++;

}

\\ba\\w*\\b表示匹配以字母a为开头的单词。

Pattern.compile(regex)表示将给定的正则表达式编译到具有给定标志的模式中。

matcher(str)创建匹配给定输入与此模式的匹配器。

mather.find()尝试查找与该模式匹配的输入序列的下一个子序列。

此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。

如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。

group() 返回由以前匹配操作所匹配的输入子序列。

打印结果:

不同

从上例中可以看出,Java中的正则表达式与之前所说不一致(多了一个),在其他语言中\\表示我想在正则表达式中插入一个普通的反斜线,请不要给它任何特殊的意义,而在Java中,\\的意思是我想要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。

如果想表示数字,则是\\d。如果要插入普通的反斜线,则是\\\\

String

String类中有几种方法可以使用正则表达式:

| 方法 | 返回类型 | 功能 | 示例 |

| — | — | — | — |

| matches() | boolean | 告知此字符串是否匹配给定的正则表达式。 | "-1234".matches("^-?\\d+$"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值