如何修改正则表达式以接受含正整数与正浮点数的二维数组?
二维数组字符串正则验证:仅匹配正整数与正浮点数
问题描述
我有一个二维数组字符串,需要验证其中仅包含大于0的整数(int)与浮点数(double)。目前使用正则表达式pattern="^[[[0-9.,[]]+]]$"进行验证,但该表达式会接受0值,需要修改它以仅匹配正整数与正浮点数。
期望的有效示例:
[[5,0.05],[10,0.1],[15,0.15],[20,0.2],[25,0.25],[30,0.3],[35,0.35],[40,0.4],[45,0.45],[50,0.5],[55,0.55],[60,0.6],[65,0.65],[70,0.7],[75,0.75],[80,0.8],[85,0.85],[90,0.9],[95,0.95],[100,1]]
解决方案
首先明确正整数和正浮点数的匹配规则:
- 正整数:第一位为非0数字,后续可跟任意数量数字(如
5、100) - 正浮点数:分为两种情况
- 整数部分为0,但小数部分至少包含一个非0数字(如
0.05、0.1) - 整数部分为非0数字,后续跟小数点和任意数量数字(如
5.05、100.1)
- 整数部分为0,但小数部分至少包含一个非0数字(如
结合二维数组的结构[[num,num],[num,num],...],最终正则表达式如下:
^\[\[(?:(?:[1-9]\d*|0\.\d*[1-9]\d*|[1-9]\d*\.\d+)(?:,(?:[1-9]\d*|0\.\d*[1-9]\d*|[1-9]\d*\.\d+))*)\](?:,\[(?:(?:[1-9]\d*|0\.\d*[1-9]\d*|[1-9]\d*\.\d+)(?:,(?:[1-9]\d*|0\.\d*[1-9]\d*|[1-9]\d*\.\d+))*)\])*]$
正则表达式拆分解释
^和$:锁定字符串首尾,确保整个字符串完全匹配规则\[\[:匹配二维数组的起始符号[[(?:[1-9]\d*|0\.\d*[1-9]\d*|[1-9]\d*\.\d+):核心数字匹配组,覆盖所有正整数和正浮点数情况[1-9]\d*:匹配正整数0\.\d*[1-9]\d*:匹配整数为0但小数部分含非0数字的浮点数[1-9]\d*\.\d+:匹配整数部分非0的浮点数
(?:,(?:数字规则))*:匹配同一子数组内多个数字用逗号分隔的情况\]:匹配单个子数组的结尾符号](?:,\[(数字组)\])*:匹配多个子数组用逗号分隔的情况]$:匹配二维数组的结尾符号]
测试验证
- 有效输入:用户提供的示例字符串会被匹配通过
- 无效输入:包含
0、0.0、-5等内容的数组字符串会被拒绝
内容的提问来源于stack exchange,提问作者Rizana Fazily
相关产品推荐
相关产品推荐

