正则表达式:匹配x次或者y次

23 regex

假设我需要匹配一个模式,如果它连续出现3或6次.我能得到的最接近的是\ d {3,6},但这并不能完全符合我的需要.

'123'应匹配
'123456'匹配
'1234'不匹配

cle*_*tus 33

^(\d{3}|\d{6})$
Run Code Online (Sandbox Code Playgroud)

你必须有某种终结器,否则\d{3}将匹配1234.这就是为什么我把^和$放在上面.一种替代方法是使用外观:

(?<!\d)(\d{3}|\d{6})(?!\d)
Run Code Online (Sandbox Code Playgroud)

确保它之前没有数字(在这种情况下).更前瞻和回顾后零宽度断言.


pax*_*blo 12

怎么样:

(\d\d\d){1,2}
Run Code Online (Sandbox Code Playgroud)

虽然你还需要两端的防护装置,这取决于你的RE引擎,例如:

[^\d](\d\d\d){1,2}[^\d]
Run Code Online (Sandbox Code Playgroud)

要么:

^(\d\d\d){1,2}$
Run Code Online (Sandbox Code Playgroud)


CTS*_*_AE 5

对于这种情况,我们可以使用这种狡猾的方法:

清洁实施

/(\d{3}){1,2}/
/(?:\d{3}){1,2}/
Run Code Online (Sandbox Code Playgroud)

如何?!

这是可行的,因为我们正在寻找在这种情况下连续的三的倍数。

注意:在这种情况下没有理由捕获组,因此我将?:非捕获组标志添加到捕获组。

这与实现类似paxdiablo,但稍微干净一些。

匹配的六角形

我正在做类似的事情来匹配基本的十六进制颜色,因为它们的长度可能是 3 或 6。这使我能够保持我的十六进制颜色检查器的匹配干燥,即:

/^0x(?:[\da-f]{3}){1,2}$/i
Run Code Online (Sandbox Code Playgroud)