使用可选Word验证重复的精确匹配模式

时间:2014-03-21 06:44:40

标签: java regex

我正在尝试读取模式输入字符串。假设这个输入字符串在每个空格中分开。

第一个数字字符串(一,二,三,...)是必需的,可选的数字字符串可以是可选的,直到它满足操作数,然后出现在相同的数字字符串模式之后。 例如,

ONE TWO ADD TWO FIVE // which is valid
ONE ADD TWO // which is valid
TWO SUB FIVE // also is valid
SUB TWO // is not valid

如何使用正则表达式来查找模式?我几乎没有开始使用Java的Pattern和Matcher类开始。

    public boolean validate(String inputStr) {
    // pattern regex
    /* (zero|one|two|three|four|five|six|seven|eight|nine)\\s(zero|one|two|three|four|five|six|seven|eight|nine)?\\s(add|sub) */
    Pattern p = Pattern.compile("(zero|one|two|three|four|five|six|seven|eight|nine)\\s[(zero|one|two|three|four|five|six|seven|eight|nine)]?\\s(add|sub|divide|multiply)\\s(zero|one|two|three|four|five|six|seven|eight|nine)", Pattern.CASE_INSENSITIVE);
    // input string
    Matcher m = p.matcher(inputStr);

    return m.matches();
}

返回false。

    boolean isValidate = validate("One add two ");
    System.out.println(isValidate);

任何人都可以帮我吗?感谢。

1 个答案:

答案 0 :(得分:1)

这是因为当没有可选的数字字符串时,它也会占用空间,所以它们将匹配第一个字符串之后的两个空格并且你将得到假。所以它们将匹配。所以移动空间也在方括号内。

试试这个,

Pattern p = Pattern.compile("((zero|one|two|three|four|five|six|seven|eight|nine)\\s){1,2}(add|sub|divide|multiply)(\\s(zero|one|two|three|four|five|six|seven|eight|nine)){1,2}", Pattern.CASE_INSENSITIVE);