我正在尝试读取模式输入字符串。假设这个输入字符串在每个空格中分开。
第一个数字字符串(一,二,三,...)是必需的,可选的数字字符串可以是可选的,直到它满足操作数,然后出现在相同的数字字符串模式之后。 例如,
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);
任何人都可以帮我吗?感谢。
答案 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);