2

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

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

是否有一个特殊的重复量词让它有一个更短的表达式?

4

2 回答 2

0

我想你也可以这样做:

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

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

关于花括号量词的附加评论 -

考虑一下:
表格指定的确切数量 {n,n}{n}
贪婪说明符的影响是什么?

Perl 文档说
{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}引擎所见。没有优化的改变。我认为关于惰性量词,这是一个糟糕且令人困惑的符号,根据所有文档(并且所有文档都有这个),在精确的速记符号上保持“最不可能”。我认为这个速记{n}?应该被淘汰,或者实际上用于一些有用的东西—— (?:x{n})?. 这就是我的观点,尽管与您的评论无关。

于 2013-09-11T16:20:39.037 回答
0

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

于 2013-09-21T07:44:00.877 回答