Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式的含义是什么;任何正整数,不包括0“;_Java_Regex - Fatal编程技术网

Java 正则表达式的含义是什么;任何正整数,不包括0“;

Java 正则表达式的含义是什么;任何正整数,不包括0“;,java,regex,Java,Regex,如何改进^\d+$以禁止0 编辑(使其更具体): 允许的示例: 1 30 111 不允许的示例: 0 00 -二十二 不管是否允许带前导零的正数(例如022) 这是用于Java JDK正则表达式实现的。尝试以下方法: ^[1-9]\d*$ …和一些填充超过30个字符,因此答案限制:-) 得到了这个: ^[1-9]|[0-9]{2,}$ 有人赢了吗?:) 您可能需要这个(编辑:允许表单编号0123): 然而,如果是我,我会做 int x = Integer.parseInt(s) if (x

如何改进
^\d+$
以禁止
0

编辑(使其更具体):

允许的示例:
1
30
111
不允许的示例:
0
00
-二十二

不管是否允许带前导零的正数(例如
022

这是用于Java JDK正则表达式实现的。

尝试以下方法:

^[1-9]\d*$
…和一些填充超过30个字符,因此答案限制:-)

得到了这个:

^[1-9]|[0-9]{2,}$
有人赢了吗?:)

您可能需要这个(编辑:允许表单编号
0123
):

然而,如果是我,我会做

int x = Integer.parseInt(s)
if (x > 0) {...}

很抱歉来晚了,但OP希望允许
076
,但可能不希望允许
0000000000

所以在这种情况下,我们需要一个由一个或多个数字组成的字符串,其中至少包含一个非零。就是

^[0-9]*[1-9][0-9]*$

为了好玩,另一种选择是使用lookaheads:

^(?=\d*[1-9])\d+$

任意数字,但必须至少有一个是
[1-9]

您可以尝试一种消极的前瞻性断言:

^(?!0+$)\d+$

^[1-9]*$是我能想到的最简单的

^\d*[1-9]\d*$

这可以包括所有正值,即使前面用零填充

允许

一,

01

十,

11等

不允许

0

00


000等。试试这一个,这一个最能满足要求

[1-9][0-9]*
下面是示例输出

String 0 matches regex: false
String 1 matches regex: true
String 2 matches regex: true
String 3 matches regex: true
String 4 matches regex: true
String 5 matches regex: true
String 6 matches regex: true
String 7 matches regex: true
String 8 matches regex: true
String 9 matches regex: true
String 10 matches regex: true
String 11 matches regex: true
String 12 matches regex: true
String 13 matches regex: true
String 14 matches regex: true
String 15 matches regex: true
String 16 matches regex: true
String 999 matches regex: true
String 2654 matches regex: true
String 25633 matches regex: true
String 254444 matches regex: true
String 0.1 matches regex: false
String 0.2 matches regex: false
String 0.3 matches regex: false
String -1 matches regex: false
String -2 matches regex: false
String -5 matches regex: false
String -6 matches regex: false
String -6.8 matches regex: false
String -9 matches regex: false
String -54 matches regex: false
String -29 matches regex: false
String 1000 matches regex: true
String 100000 matches regex: true

这应该只允许小数大于0

^([0-9]\.\d+)|([1-9]\d*\.?\d*)$

此正则表达式匹配0中的任意正整数:

(?<!-)(?<!\d)[1-9][0-9]*
(?

它适用于两个负数lookbehind,它在一个数字之前搜索负数,表示它是负数。它也适用于任何大于-9的负数(例如-22)。

我的模式很复杂,但它完全覆盖了“任何正整数,不包括0”(1-2147483647,不长)。 它用于十进制数,不允许前导零

^((1?[1-9][0-9]{0,8})|20[0-9]{8}|(21[0-3][0-9]{7})|(214[0-6][0-9]{6})
|(2147[0-3][0-9]{5})|(21474[0-7][0-9]{4})|(214748[0-2][0-9]{3})
|(2147483[0-5][0-9]{2})|(21474836[0-3][0-9])|(214748364[0-7]))$

任何正整数,不包括0:
^\+?[1-9]\d*$



任何正整数,包括0:
^(0 | \+?[1-9]\d*)$

您想接受吗,例如,
076
?@Karl Knechtel:但为了简单起见,我可以牺牲此功能。“任何正整数,不包括0”请注意,0不是一个正整数。出于好奇,为什么我们在结尾需要\d+?为什么
^[1-9]+$
不起作用?@mtahmed:
^[1-9]+$
不允许10它将允许1。“\d*”也与空字符串匹配。@mtahmed
^[1-9]+$
将不允许
10
@Mulmoth该建议将允许
1
,因为
\d*
匹配零次或多次。但是,它将不允许
076
,因为它不是以
[1-9]
开头的。但是
01
呢?两个问题:这也匹配“123abc”,并返回123,这可能会引发ParseException。@Daniel:我想这可能会在更大的解析方案中使用,因此您将有一个只捕获数字的regex/BNF,以及一个java代码来检查捕获的数字是否为非零正。@Daniel:在任何情况下,您仍然需要将数据作为整数,因此迟早会出现这种情况您仍然需要调用parseInt()或滚动您自己的parseInt()。@Daniel:
Integer.parseInt()
本身增加的开销很小。抛出和捕获异常的代价很高。@Lie:
\\+?
前缀是怎么回事?我猜这应该是一个转义加号,就像Java源代码中出现的那样,但为什么?如果不允许使用减号,我认为可以安全地假设加号不存在,同样。这将允许
00
您想要这个吗?并且它将允许
1aaaaa
abcd01
^
只属于第一个备选方案,而
$
只属于第二个备选方案,为了解决这个问题,在它周围放上括号([1-9]|[0-9]{2,})$
好的,它接受
000000000
。您说的是除零以外的任何整数。此正则表达式将错误地与
10
29303
等数字不匹配。它还将匹配空字符串。这似乎满足了OP的要求。我想要正整数和正小数。您有什么解决方案吗?您需要你应该把它作为一个新问题而不是一个评论来问。但是扰流器:
^[0-9]*[1-9][0-9]*(\.[0-9]+)$
但是这是对“十进制”的一个假设。你需要指数部分吗?这很复杂,所以问另一个问题。+1用于考虑角落情况!顺便说一句,这个模式的工作原理完全相同:
^0*[1-9]\d*$
因为第一个
[0-9]*
仅在
[1-9]
找到第一个非零之前处于活动状态,也就是说,它仅在有初始零(
0*
)之前处于活动状态。这是正确的答案。它接受00098,这是问题的正确行为。谢谢,但与接受的答案相比,它没有增加任何价值或优雅。
[1-9]\d*
@Zeemee这是不正确的,因为\d可能包含非0-9的数字。例如一些库中的阿拉伯数字,如واحددددددددددددد。@dummyDev我不知道。谢谢您的提及!遗憾的是,“123abcd”会返回真的。Charith Jayasanka-是的,它仍然需要一个“$,02等等…
^((1?[1-9][0-9]{0,8})|20[0-9]{8}|(21[0-3][0-9]{7})|(214[0-6][0-9]{6})
|(2147[0-3][0-9]{5})|(21474[0-7][0-9]{4})|(214748[0-2][0-9]{3})
|(2147483[0-5][0-9]{2})|(21474836[0-3][0-9])|(214748364[0-7]))$