我想匹配像"sec 30-31"
这样的模式。但它不适合我。
我正在使用如下的匹配模式。
private boolean checkConstraint(String inputValue) {
inputValue = inputValue.trim();
if (inputValue.matches("[\\>][\\s]*[\\d]*") || inputValue.matches("[\\<][\\s]*[\\d]*") || inputValue.matches("[\\d]*[\\s]*[-][\\s]*[\\d]*")
|| inputValue.matches("[\\=][\\s]*[\\d]*") || inputValue.matches("[\\=][\\s]*[\\w]*") || inputValue.matches("[\\d]*")
|| inputValue.matches("[\\w]*") || inputValue.matches("[\\d]*[\\s]*[|][\\s]*[\\d]*")
|| inputValue.matches("[\\w]*[\\s]*[|][\\s]*[\\w]*") || inputValue.matches("[\\d]*[\\,][[\\s]*\\d\\,]*")
|| inputValue.matches("[\\w]*[\\,][[\\s]*\\w\\,]*") || inputValue.matches("[\\d]*[\\s]*[\\?]")
|| inputValue.matches("[\\w]*[\\s]*[\\?]") || inputValue.matches("[\\d]*[\\s]*[\\*]") || inputValue.matches("[\\w]*[\\s]*[\\*]")
|| inputValue.matches("[\\w]*[\\s]*[\\w\\,]*") || inputValue.matches("[\\s]*[\\%]*[\\s]*[\\w]*[\\s]*")
|| inputValue.matches("[\\s]*[\\w]*[\\s]*[\\%][\\s]*") || inputValue.matches("[\\s]*[\\%]*[\\s]*[\\w]*[\\s]*[\\%][\\s]*")
|| inputValue.matches("[\\w]*[\\s]*[-][\\s]*[\\w]*") || inputValue.matches("[\\w]*[\\s]*[.][\\s]*[\\w]*")
|| inputValue.matches("[\\w]*[\\s]*['][\\s]*[\\w]*") || inputValue.matches("[[\\w]*[\\s]*[\\w]*[\\s]*]*")) {
return true;
}
return false;
}
我想匹配字符串&#34; sec 30-31&#34;当我匹配其返回false inputValue.matches("[\\w]*[\\s]*[-][\\s]*[\\w]*")
时,它将返回true。
任何人都可以帮助我。
由于
Sitansu
答案 0 :(得分:1)
你的正则表达式
inputValue.matches("[\\w]*[\\s]*[-][\\s]*[\\w]*")
赢得与sec 30-31
匹配,因为它与alphanumerics
+ whitespaces
+ -
+ whitespaces
+ alphanumerics
匹配。如你所见,没有数字的地方。
您需要在管道&#34;
中添加另一个matches()
inputValue.matches("[a-zA-Z]+\\s+\\d+-\\d+")
请IDEONE demo返回true
。
下面,
[a-zA-Z]+
- 匹配1个或多个拉丁字母\\s+
- 匹配1个或多个空格\\d+
- 匹配1位或更多位数-
- 匹配文字连字符\\d+
- 匹配1位或更多位数。