环顾和非捕获组之间的功能差异?

环顾和非捕获组之间的功能差异?,第1张

环顾和非捕获组之间的功能差异?

根本的区别在于以下事实:非捕获组仍会消耗它们匹配字符串部分,从而使光标向前移动。

一个与之根本不同的示例是,当您尝试匹配某些字符串时,这些字符串被某些边界包围并且这些边界可以重叠。示例任务:

匹配

a
给定字符串中被
b
s包围的所有s-给定的字符串为
bababaca
。应该在位置2和4进行两次比赛。

使用环视很容易,您可以使用

b(a)(?=b)
(?<=b)a(?=b)
进行匹配。但
(?:b)a(?:b)
不会起作用-
第一场比赛还将消耗位置3处的b,这是第二场比赛的边界。(注意:这里实际上不需要非捕获组)

另一个比较突出的示例是密码验证-检查密码中是否包含大写,小写字母,数字等内容-您可以使用一堆替代字词来匹配这些字符-但提前查找会更容易:

(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!?.])

(?:.*[a-z].*[A-Z].*[0-9].*[!?.])|(?:.*[A-Z][a-z].*[0-9].*[!?.])|(?:.*[0-9].*[a-z].*[A-Z].*[!?.])|(?:.*[!?.].*[a-z].*[A-Z].*[0-9])|(?:.*[A-Z][a-z].*[!?.].*[0-9])|...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存