为何Java的String.matches()匹配"HOLIDAY"与"H*I*Y"返回false
匹配失败原因解析
你遇到的问题核心是混淆了正则语法中*的作用和普通通配符*的作用:
- 正则语法中
*是量词,仅作用于它前面紧邻的单个字符/子表达式,表示匹配该内容零次或多次,不代表匹配任意长度的任意字符 - 你定义的
H*I*Y模式实际匹配规则为:- 字符串开头允许出现0~N个连续的字符
H - 后续允许出现0~N个连续的字符
I - 字符串末尾必须是单个字符
Y
- 字符串开头允许出现0~N个连续的字符
你的输入字符串HOLIDAY的实际结构为H + O + L + I + D + A + Y,H之后的O、L,以及I之后的D、A这几个字符,在你写的正则模式中完全没有对应的匹配规则,自然无法匹配成功,因此matches方法返回false。
如果要实现「以H开头、中间存在I、以Y结尾,中间可以插入任意字符」的匹配效果,应该将模式修改为H.*I.*Y:其中.是正则中匹配任意单个字符的规则,.*组合才表示匹配任意长度的任意字符序列。
内容的提问来源于stack exchange,提问作者Parth
相关产品推荐
相关产品推荐

