Regex 在PCRE中重复三次或五次

Regex 在PCRE中重复三次或五次,regex,pcre,Regex,Pcre,在PCRE中,有没有比下面的方法更好的方法来指定字符重复3或5次 /(\d{3})|(\d{5})/ 是否有一个特殊的重复量词使其具有较短的表达式?我想你也可以这样做: Edit2:更正贪婪说明符\d{2}?为可选量词 /(\d{3}(?:\d{2})?)/ 关于花括号量词的附加注释- 考虑一下这一点: 以{n,n}或{n} 贪婪说明符的影响是什么 Perl文档说 {n}?精确匹配n次,而不是贪婪地匹配 {n}+精确匹配n次,不返回任何内容(冗余) 影响什么都不是,除了必须匹配的确切数量之

在PCRE中,有没有比下面的方法更好的方法来指定字符重复3或5次

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

是否有一个特殊的重复量词使其具有较短的表达式?

我想你也可以这样做:

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

 /(\d{3}(?:\d{2})?)/
关于花括号量词的附加注释-

考虑一下这一点:
{n,n}
{n}

贪婪说明符的影响是什么

Perl文档说
{n}?精确匹配n次,而不是贪婪地匹配

{n}+精确匹配n次,不返回任何内容(冗余)

影响什么都不是,除了必须匹配的确切数量之外,它没有任何内涵。
显然这里有个洞

还有一个
语法
漏洞,其形式为
{,n}
,未被解析为量词,
但从字面上来说

非常混乱,因为在这些情况下从未产生错误

需要并使用完全符合这种形式的量词结构:

{n}?精确匹配n次,或不匹配任何内容

{,n,o,p,…}匹配最多的n,o,p,次(其中n

{,n,o,p,…}?匹配最少的n,o,p次数(其中n

如果使用/填补了这个
语法漏洞'
,OP的问题可以用
简单的
/(\d{,3,5})/

在更广泛的上下文中,这将为正则表达式添加imense功能。
而且可能会大大减少回溯,因为这种类似列表的语法是原子的
本质上

为@Tim Pietzcker-

对不起,我来晚了。我认为curyly量词中没有“精确”的结构,符号是快捷的。只有您建议的最小/最大值(如果我错了,请纠正我)。我只能使用Perl正则表达式调试器查看。它建议将
{n}
符号解析为引擎看到的
{n,n}
。没有更改任何优化。我认为对于惰性量词来说,这是一种糟糕且令人困惑的表示法,根据所有文档(所有文档都有这种表示法),在精确的shorhand表示法上保持“最小可能”。我认为这个shorhand
{n}?
应该被删除,或者实际用于一些有用的东西,即
(?:x{n})的速记。这就是我的观点,尽管与你的评论有点无关。

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

我想不需要。不过你可以做-
\d{3}(\d{2})?
+1你需要在黑板上加上一些点。或者你需要
\d(\d{2}{1,2}
;-)。但这是错误的答案。问号使
{2}
量词变懒(这是一个no-op,因为没有任何可变性),而不是可选的。你需要在
\d{2}
/\d{3}(?:\d{2})?/
@Tim Pietzcker-修复!谢谢你指出这一点。在这之前,我正在处理属性,\p{},而这一个的焦点丢失了。现在没有,但是,你不认为
{n}?
应该是确切的意思还是什么都没有?我没有看到任何构造设计冲突。
x{2}?
x{2}
完全相同。懒惰量词只有在有不同匹配可能性(零或一,零或多,一或多…)时才起作用,但“正好两个,尽可能少”在各方面都与“正好两个”相同。@Tim Pietzcker-因为太长,所以在上面贴了一条回复。谢谢仅供参考,OP说了三五次。