php - PCRE 能否测试主题中任何位置(字符类)出现的总数?

标签 php regex pcre

给定一个包含十进制数的字符串(以 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 位数字并失败。请参阅演示。

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

关于php - PCRE 能否测试主题中任何位置(字符类)出现的总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954396/

相关文章:

php - 正则表达式 - 匹配文本中的 "(posted|post|submitted) by:"

c# - 正则表达式解析有限的 SQL Where 子句

regex - 禁止带有属性的 BBCode 标签中的空内容

regex - 删除第一级 block

php - 推送通知适用于开发,而不是生产

javascript - 如何为 wordpress 创建插件

php - 允许 Node.js Web 服务器处理 PHP

recursion - PHP中 "Fatal error: Maximum function nesting level of ' 10 0' reached, aborting!"的解决方案

regex - 如何在powershell中编写正则表达式

javascript - 在一组中匹配量化单词字符多次