You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式返回错误索引求助:为何匹配索引为1而非2?

问题原因与解决方法

核心错误:正则表达式范围写错了

你的正则[a-zA-z0-9]里的A-z范围存在问题——ASCII编码中,大写字母Z(ASCII码90)和小写字母a(ASCII码97)之间还包含了下划线_(ASCII码95),所以这个正则会匹配下划线。而你的文本" _his_ fancy;"中索引1的位置正好是下划线,find方法自然会先匹配到它,返回索引1。

修正方案

把正则里的a-z改成A-Z,正确的字母范围应该是[a-zA-Z0-9],这样就只会匹配大小写字母和数字,不会包含下划线了。同时原代码里的println(idx)是错误的,应该用match?.start()获取匹配结果的起始索引,修正后的代码如下:

val text = " _his_ fancy;"
val startIndex = 0
val pattern: Regex = "[a-zA-Z0-9]".toRegex()
var match = pattern.find(text, startIndex)
println(match?.start())

内容的提问来源于stack exchange,提问作者user19862929

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:21:15