为何Kotlin中`(HP)(A)->H`不匹配`[^a-zA-Z0-9]A[^a-zA-Z0-9]`正则?
问题核心原因
Kotlin的Regex.matches()方法要求正则表达式完全匹配整个输入字符串,而Regexr网站默认是在文本中查找符合规则的子串,两者匹配逻辑存在本质差异。你的正则[^a-zA-Z0-9]A[^a-zA-Z0-9]只能匹配文本(HP)(A)->H里的(A)部分,无法覆盖整个字符串,所以matches()返回false。
两种解决方式
- 改用
containsMatchIn()方法:该方法负责检查文本中是否存在符合正则的子串,和Regexr的默认行为一致val regex = Regex("[^a-zA-Z0-9]A[^a-zA-Z0-9]") val text = "(HP)(A)->H" println(regex.containsMatchIn(text)) // 输出true - 保留
matches()但修改正则:在正则前后添加.*(匹配任意字符任意次数),让正则能覆盖整个文本val regex = Regex(".*[^a-zA-Z0-9]A[^a-zA-Z0-9].*") val text = "(HP)(A)->H" println(regex.matches(text)) // 输出true
内容的提问来源于stack exchange,提问作者黃奕捷
相关产品推荐
相关产品推荐

