PCRE中重复三次或五次

时间:2013-09-11 15:52:09

标签: regex pcre

PCRE中的

是否有更好的方法而不是下面的方法来指定字符重复3或5次?

/(\d{3})|(\d{5})/

是否有特殊的重复量词可以缩短表达式?

2 个答案:

答案 0 :(得分:0)

我想你也可以这样做:

Edit2:已将贪婪说明符\ d {2} ?更正为可选量词。

 /(\d{3}(?:\d{2})?)/

关于花括号量词的补充评论 -

考虑一下:
指定格式{n,n}{n}的确切金额 贪婪的说法者有什么影响?

Perl docs说  {n}? Match exactly n times, not greedily
 {n}+ Match exactly n times and give nothing back (redundant)

影响不算什么,除了必须匹配的确切金额外,它没有任何内涵 显然这里有一个洞。

syntax形式的{,n}洞,未被解析为量词,
但作为文字。

相当令人困惑,因为在这些情况下不会产生任何错误。

对于完全符合这种形式的量词结构,需要和使用:

{n}? Match exactly n times, or match nothing

{,n,o,p, ..} Match the most either n,o,p, times (where n < o < p)
{,n,o,p, ..}? Match the least either n,o,p, times (where n < o < p)

如果使用/填充了syntax hole',OP的问题可以通过回答来回答 简单的/(\d{,3,5})/

在更广泛的背景下,这会增加正则表达式的强大功能 并且可能会大大减少回溯,因为这种类似列表的语法是原子的 在性质上。

@Tim Pietzcker的编辑 -
对不起,我迟到了回复。我不认为在curyly量词中有一个“精确”的构造,符号是捷径。你建议只有最小/最大(如果我错了,请纠正我)。我只能看到Perl正则表达式调试器。它表明{n}符号被引擎解析为{n,n}。没有更改优化。我认为这对于懒惰量词来说是一个糟糕且令人困惑的符号,根据所有文档(以及所有文档都有这个),在一个确切的标记符号上保持“最不可能”。我认为这个shorhand {n}?应该被删除,或实际用于有用的东西 - (?:x{n})?的简写。这是我的观点,尽管与你的评论无关。

答案 1 :(得分:0)

/ \ d {3,5}?/也许?你真的需要捕捉括号吗?