如果检查的字符串仍有剩余字符,如何使正则表达式匹配失败?

Val*_*ion 3 java regex

我正在尝试使用正则表达式检查字符串,并且只有当字符串仅包含 *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”这样的字符串应该失败。

rat*_*eak 5

使用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)