向前查看
将 <<q(?=u)i>> 应用到 “quit”
a. 当前字符是 “q”,<<q>>成功匹配“q”
b. 当前字符是 “u”,向前查看<<(?=u)>>成功匹配"u"
c. 当前字符是 "i”,但是,现在 向前查看 完成了。于是,正则引擎 告诉字符串 “请将当前字符回退一个”。于是,当前字符 从“i”回退到“u”
d. 当前字符是“u”,引擎继续处理下一个正则符号<<i>>。结果发现<<i>> 和 当前字符“u” 不匹配
e. 匹配失败了
f. 开始回溯。当前字符变成“u”,然后和 正则<<q>>进行匹配
g. ... ...
<<(?>> 的用法
新增的 “非捕获型括号”、“顺序环视” 都需要新的表达方式,所以,Larry 采用了我们今天使用到 <<(?x...)>>表示法
<<(?x...)>>的用法共有 11 中
零长度断言(Zero-WidthAssertions)
1-2:“顺序环视(lookahead)”:<<(?=...)>>, <<(?!...)>>
3-4:“逆序环视(lookbehind)”:<<(?<=...)>>,<<(?<!...)>>
分组、捕获、条件判断、控制(Grouping,Capturing, Conditionals, and Control)
5:“非捕获型括号(non-capturingparentheses)”:<<(?:...)>>
6:“固化分组(atomicgrouping)”:<<(?>...)>>
7: “命名捕获(namedcaputuring group)” (Java7将会支持) <<(?<Name>...)>>
8: “条件判断(conditional)” (Java不支持):<<(?ifthen|else)>>
注释、模式修饰词
9: “模式修饰词(Modemodifier)”:<<(?modifier)>>,例如 (?i) 和(?-i)
10: “模式作用范围(Mode-modifiedspan)”:<<(?modifier:...)>>,例如(?i:...)
11: “注释(Comments)”:<<(?#...)>> 和 #...