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 演示。
给定一个包含十进制数的字符串(以 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 演示。