用于验证输入C 200 50的正则表达式

时间:2019-04-13 10:41:43

标签: regex

我该如何在下面编写正则表达式?

C 200 50

C / c可以是大写或小写。 200-0至200范围 50-o到50范围

所有三个单词都用空格分隔,并且可以有1个或更多的空格。

这是我到目前为止尝试过的。

public static void main(String[] args) {
        String input = "C 200 50";
        String regex = "C{1} ([01]?[0-9]?[0-9]|2[0-9][0]|20[0]) ([01]?[0-5]|[0-5][0])";

        Pattern pattern = Pattern.compile(regex);    
        Matcher matcher = pattern.matcher(input);
        boolean found = false;    
        while (matcher.find()) {    
            System.out.println("I found the text "+matcher.group()+" starting at index "+    
             matcher.start()+" and ending at index "+matcher.end());    
            found = true;    
        }
    }

不确定如何有多个空格,第一个'C'上下浮动

1 个答案:

答案 0 :(得分:1)

如果要验证字符串,则必须期待整个字符串匹配。这意味着您应该使用.matches()而不是.find()方法,因为.matches()需要完整的字符串匹配。

要使cc都匹配,可以在C处使用Pattern.CASE_INSENSITIVE标志,或者在嵌入Pattern.compile的样式前添加模式标记选项。

要匹配一个或多个空格,可以使用(?i)+

要匹配前导零,可以在数字匹配部分的前面加上\\s+

因此,您可以使用

0*

然后

请参见regex demo和Regulex图:

enter image description here

请参见Java demo

String regex = "(?i)C\\s+0*(\\d{1,2}|1\\d{2}|200)\\s+0*([1-4]?\\d|50)";

输出:

String input = "C 200 50";
String regex = "(?i)C +0*(\\d{1,2}|1\\d{2}|200) +0*([1-4]?\\d|50)";

Pattern pattern = Pattern.compile(regex);    
Matcher matcher = pattern.matcher(input);
boolean found = false;    
if (matcher.matches()) {    
    System.out.println("I found the text "+matcher.group()+" starting at index "+    
       matcher.start()+" and ending at index "+matcher.end());    
    found = true;    
}

如果需要部分匹配,请在I found the text C 200 50 starting at index 0 and ending at index 8 块中通过.find()方法使用模式。要匹配整个单词,请用while包装模式:

\\b