我正在阅读此article,但在理解这些内容时遇到了一些困难:
给出字符串quit
和正则表达式q(?=u)i
的原因,为什么正则表达式不匹配?
引擎首先找到q,然后向前看,看在q之后是否还有u对吗?既然是正面的前瞻,这将导致正面的断言,但是我不明白接下来会发生什么。
某些线索可能是(关于环顾四周):
They do not consume characters in the string, but only assert whether a match is possible or not.
有人可以帮助我完全理解吗?
非常感谢!
答案 0 :(得分:1)
这是因为环视瞄准的是字符之间的位置,而不是字符本身。
如果我们按照三个步骤阅读您的正则表达式:
q
u
(正确)-这与u
是下一个字符的位置匹配i
-不是,因为您仍然处在下一个字符是u
的位置。通常使用环回查找来查找通配符匹配的开始/结束,例如,如果您只想匹配qu
之后的单词部分,则可以使用后向查找来查找捕获开始:
(?<=\bqu)
然后捕获任何字符,直到单词结尾:
(?<=\bqu).*?\b
这将匹配以下内容:
quit => it
question => estion
quagmire => agmire
注意,后面的外观表示比赛的开始,而不必知道比赛的第一个字符是什么。