是否有更好的方法而不是下面的方法来指定字符重复3或5次?
/(\d{3})|(\d{5})/
是否有特殊的重复量词可以缩短表达式?
答案 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}?/也许?你真的需要捕捉括号吗?