第六章 打造高效正则表达式
多选结构的代价很高
Page.231
多选结构或许是回溯的主要原因,字符组一般只是进行简单的测试,所以效率要比对应的多选结构高。
\cx 匹配control + 控制字符,就是说 匹配由x指明的控制字符
这里的X是一个控制字符。匹配一个字符串的控制字符。
比如:
\cI 匹配 control + I,等价于 \t,
\cJ匹配 control + J,等价于 \n,
\cM匹配 control + M,等价于 \r\ca \cb \cc … 又分别匹配 control+a, control+b,control+c….,具体他们等价于什么,看运行的程序了
Java 中的正则表达式
单词分界符 \b \B 能够识别 Unicode 字符
顺序环视中支持任意长度的表达式,逆序环视则不允许(可以出现
?
, 不能出现*
,+
)\Q…\E 消除之间所有元字符的特殊含义,当作普通字符来看(不包括\E, 所以如果原始字符串中包含\E, 就不能直接在首位加\Q和\E来直接使用,具体参见 Pattern.quote 方法)
1 | // 也可以使用此方法,返回 \Q.\E |
anchoring bounds 标志位,如果检索范围不等于整个目标字符串,设定是否将检索范围的边界设置为 “文本起始位置” 和 “文本结束位置”, 影响文本行边界元字符 (\z \Z \A ^ $),Reset 方法不修改此标志位。
transparent bounds 标志位, 如果检索范围是整个目标字符串的一段文本,设置为true,允许 look 结构(环视,单词分界符)超越检索范围的边界,检查外部的文本,默认为 false, Reset 方法不修改此标志位。
find 方法,replaceAll, replaceFirst 方法,在内部都会调用 Reset, 即检索范围重置为整个文本, 将匹配的位置指向文本的开头,弃用前一次成功匹配的所有信息
匹配结果中的偏移值 (start end) 与 检索范围没有关系, 是在整个文本中的位置
一个值设置为transient,然后初始化,加锁
如: Files.lines(new File(strPath).toPath, StandardCharsets.UTF_8)