字符串中的最小数字应为1个正则表达式验证吗?

时间:2019-02-06 02:11:47

标签: java regex

我有一个需要匹配的字符串。意味着它只能包含一个数字,后跟空格,或者仅是一个数字,最小数字应始终为1。例如:

3 1 2
1 p 3
6 3 2
0 3 2

第一个和第三个是有效字符串,其他所有都不是

我想出了以下正则表达式,但是我不确定如何检查该字符串中的最小数字应始终为1?

str.matches("(\\d|\\s)+")

here中使用的正则表达式

4 个答案:

答案 0 :(得分:1)

只需将error[E0433]: failed to resolve: maybe a missing extern crate crates;? --> src\types.rs:17:5 | 17 | use crates::chrono::{DateTime, NaiveDate, Utc}; | ^^^^^^ maybe a missing extern crate crates;? 替换为\\d

[1-9]只是\\d类的简写。

这是一个更好的正则表达式:[0-9],因为它可以解决两位数的问题,并且不允许在末尾留空格。

答案 1 :(得分:0)

不是所有问题都可以或应该用正则表达式解决。

您可以使用一个简单的表达式,例如

str.matches("((\\d+)\\s)+")

或类似的东西可以简单地检查您的输入行是否仅包含数字组,后跟一个或多个空格。

如果匹配,则沿空格分开,对于每组数字,将其转换为数字并针对有效范围进行验证。

我有一种直觉,即正则表达式实际上不足以进行所需的验证。

答案 2 :(得分:0)

正则表达式是解决方案的一部分。但是我不认为正则表达式可以单独解决您的问题。

这是我建议的解决方案:

private static boolean isValid(String str) {
    Pattern pattern = Pattern.compile("[(\\d+)\\s]+");
    Matcher matcher = pattern.matcher(str);

    return matcher.matches() && Arrays.stream(Arrays.stream(matcher.group().split(" "))
            .mapToInt(Integer::parseInt)
            .toArray()).min().getAsInt() == 1;
}

请注意数学类型:matcher.matches()-检查整个输入是否匹配。 (不要使用matcher.find()-因为它不会拒绝无效的输入,例如“ 1 p 2”)

答案 3 :(得分:0)

如果它只包含一个数字,然后是空格,或者一个数字,并且最小数字应为1,并且数字也可以大于10,则可以使用:

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

请注意,如果您只想匹配一个空格,则可以不使用matches more中的\s,而只需在模式中添加一个空格。

说明

  • ^断言字符串的开头
  • [1-9]\\d*匹配一个从1开始的数字
  • (?: [1-9]\\d*)*从1开始重复一个数字,并加一个前置空格
  • $声明字符串的结尾

Regex demo