Java 8下正则实现多字符串等值匹配的写法问题咨询
正则修改方案
问题根因
你当前的正则存在两个核心问题:
- 正则中
(、)属于分组元字符,如需匹配字面量括号必须转义,Java字符串中需要写双反斜杠\\作为转义符 - 分支符
|的优先级低于锚点符^、$,未用分组包裹时,^仅作用于第一个分支UK (Main Land),$仅作用于最后一个分支Italian,逻辑不符合全量等值匹配的要求
之前German、Japan等中间分支能正常匹配是巧合:Java的String.matches()方法要求整个字符串完全匹配正则,当输入正好等于中间分支的字符串时,刚好能命中对应分支规则。
最终修改后的正则
优化版(非捕获分组,无额外内存开销)
"^(?:UK \\(Main Land\\)|German|Japan|Swiss|French|Italian)$"
普通版(功能一致)
"^(UK \\(Main Land\\)|German|Japan|Swiss|French|Italian)$"
匹配效果
修改后可完全等值匹配以下所有目标字符串,其余字符串均会被拦截:
- UK (Main Land)
- German
- Japan
- Swiss
- French
- Italian
内容的提问来源于stack exchange,提问作者Techie321
相关产品推荐
相关产品推荐

