在阅读工程持久软件:使用 SaaS 和云计算的敏捷方法时,我遇到了以下正则表达式(第 5 章,第5.3 节介绍黄瓜和水豚):
/^(?:|I )am on (.+)$/
我知道非捕获(?: ...)
语法,但我不明白冒号后第一个管道字符的含义。是错字吗?它有什么特殊用途吗?
正则表达式中的管道表示替代。在这种情况下,它表示空字符串""
和字符串之间的交替"I "
。
它只是or
. 它可以不匹配任何内容或I
(带有空格)。其余的是您提到的非捕获组。
正则表达式匹配类似的东西I am on a diet
,am on a diet
而且在上面的例子中,a diet
在第一组中捕获。
在 Rubular 上尝试一下 - http://rubular.com/r/q3RFEoxj1e
(?:|something)
(“无/空字符串或匹配”)
与以下内容完全相同:
(?:something)?
(“匹配,一次或没有”)
换句话说:非捕获子模式是可选的。