PCRE 可以测试主题​​中任何地方的总出现次数(字符class)吗?

Can PCRE test total number of occurrences (of a character class) anywhere in subject?

给定一个包含十进制数的字符串(以 10 为基数的位置表示法):

$numberString = '-123.456789';    // i.e. known to match /^[+-]?\d+(\.\d+)?$/

我想构建一个 PCRE 来测试是否 总位数 (跨越小数点的两边)小于或等于 N。到目前为止,我有:

/^  [+-]?  ( \d{1,N} | \d[\d.]{0,N} )  $/x

但显然\d[\d.]{0,N}也匹配\d{N+1},这是不正确的。

确保该子模式中存在小数点的断言会有所帮助,但断言显然仅限于查看固定数量的字符 forward/back 并且字符数未知。

这个(看似简单的)问题有解决方案吗?显然我知道没有正则表达式解决起来很简单,但这不是这里的问题。

^(?!(?:.*\d){6})[+-]?\d+(?:\.\d+)?$

您可以使用 lookahead 来表示 that.Lets 假设我们想说不超过 5 位数应该是 there.Or N = 5。所以我们将设置一个条件来检查我们是否可以找到 6 数字和 fail.See 演示。

https://regex101.com/r/cJ6zQ3/5