我正在尝试使用正则表达式检查字符串,并且只有当字符串仅包含 *h、*d、*w 和/或 *m(其中 * 可以是任何数字)时,此检查才会通过。
到目前为止我已经得到了这个:
Pattern p = Pattern.compile("([0-9]h)|([0-9]d)|([0-9]w)|([0-9]m)");
Matcher m = p.matcher(strToCheck);
if(m.find()){
//matching succesful code
}
Run Code Online (Sandbox Code Playgroud)
它可以检测检查的字符串中是否存在任何数字字母组合,但如果输入是“12x5d”,它也可以工作,因为其中有“5d”。我不知道这是代码问题还是正则表达式问题。有办法实现我想要的吗?
编辑:感谢您到目前为止的回答,但根据要求,我会尽力澄清一下。像“1w 2d 3h”或“1w 1w”这样的字符串是有效的并且应该通过,但是像“1w X 2d 3h”、“1wX 2d”或“wd h”这样的字符串应该失败。
使用m.matches()或添加^and$到正则表达式的开头和结尾。
编辑,但如果您想要这些由空格分隔的序列(如评论中所述),您可以使用
Pattern.compile("\\b\\d[hdwm]\\b");
Matcher m = p.matcher(strToCheck);
while(m.find()){
//matching succesful code
}
Run Code Online (Sandbox Code Playgroud)