给定一个包含十进制数的字符串(以 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}
,这是不正确的。
确保该子模式中存在基数点的断言会有所帮助,但断言显然仅限于向前/向后查找固定数量的字符,并且字符数量未知。
这个(看似简单的)问题有解决办法吗?显然,我知道如果没有正则表达式,解决问题很简单,但这不是这里的问题。
最佳答案
^(?!(?:.*\d){6})[+-]?\d+(?:\.\d+)?$
您可以使用 lookahead
来实现这一点。假设我们想说不应该超过 5
位数字。或者 N = 5
.因此,我们将设置一个条件来检查是否可以找到 6
位数字并失败。请参阅演示。
关于php - PCRE 能否测试主题中任何位置(字符类)出现的总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954396/