正则表达式返回错误索引求助:为何匹配索引为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
相关产品推荐
相关产品推荐

