考虑以下正则表达式,其中X是任何正则表达式.
X{n}|X{m}
Run Code Online (Sandbox Code Playgroud)
这个正则表达式将测试恰好或时间X发生. nm
是否有一个正则表达量词可以X准确地测试一次n或m一次?
Mar*_*ers 81
没有单一的量词意味着"恰好m或n次".你这样做的方式很好.
另一种选择是:
X{m}(X{k})?
Run Code Online (Sandbox Code Playgroud)
在哪里m < n和k是的价值n-m.
Joh*_*rak 53
以下是量词的完整列表(参见http://www.regular-expressions.info/reference.html):
?,??- 0或1次出现(??懒惰,?贪婪)*,*?- 任意数量的出现+,+?- 至少一次出现{n}-正是nOCCURENCES{n,m}- n出现m,包容性{n,m}?- n对m出现次数,懒惰{n,},{n,}?-至少noccurence要获得"正好N或M",您需要两次编写量化的正则表达式,除非m,n是特殊的:
X{n,m} 如果 m = n+1(?:X{n}){1,2} 如果 m = 2n很旧的帖子,但我想贡献一些可能有帮助的东西。我已经完全按照问题中所述的方式进行了尝试,它确实有效,但有一个问题:数量的顺序很重要。考虑一下:
#[a-f0-9]{6}|#[a-f0-9]{3}
Run Code Online (Sandbox Code Playgroud)
这将找到所有出现的十六进制颜色代码(它们的长度为 3 或 6 位)。但当我像这样翻转它时
#[a-f0-9]{3}|#[a-f0-9]{6}
Run Code Online (Sandbox Code Playgroud)
它只会找到 3 位数字或 6 位数字的前 3 位数字。这确实有道理,正则表达式专业人士可能会立即发现这一点,但对于许多人来说,这可能是一种奇怪的行为。有一些高级正则表达式功能可以避免这个陷阱,无论顺序如何,但并不是每个人都深入了解正则表达式模式。