Android 使用组名的Kotlin Regex int范围

Android 使用组名的Kotlin Regex int范围,android,regex,android-studio,kotlin,java-8,Android,Regex,Android Studio,Kotlin,Java 8,在androidstudio(Kotlin)(必须使用API-info:min25,target29)中,我试图使用regex-matches的IntRange为字符串的一部分添加颜色 它工作得很好,直到我在表达式中添加了“^((?:(!any)。)*?)”部分,以避免“any”单词位于开头和单词之间时单词被着色。。。问题是,从字符串的开头到找到的单词的结尾都应用了着色,而我只希望找到的单词被着色 我想我可以使用组名(“值”)来解决此问题,但我在设置gradle文件或项目设置以防止“不支持操作异

在androidstudio(Kotlin)(必须使用API-info:min25,target29)中,我试图使用regex-matches的IntRange为字符串的一部分添加颜色

它工作得很好,直到我在表达式中添加了“^((?:(!any)。)*?)”部分,以避免“any”单词位于开头和单词之间时单词被着色。。。问题是,从字符串的开头到找到的单词的结尾都应用了着色,而我只希望找到的单词被着色

我想我可以使用组名(“值”)来解决此问题,但我在设置gradle文件或项目设置以防止“不支持操作异常””异常时遇到了问题(消息:“此平台不支持按名称检索组。”)

在搜索互联网后,我尝试了很多方法,但似乎仅仅使用下面的gradle指令是不够的

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72"

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = "1.8"
}
这是我的密码:

val spanBuilder = SpannableStringBuilder(content)

var matches = Regex("^((?:(?!any).)*?)(?<value>(word1|word2))(?![^<]*(?<!-)>)", RegexOption.IGNORE_CASE)
matches.findAll(content).forEach {

  var wordRange = match.groups["value"]!!.range    <-- exception occurs here!

  spanBuilder.setSpan(ForegroundColorSpan(ContextCompat.getColor(context, colorID)), wordRange .first, wordRange .last + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE )
}

return spanBuilder
val spanBuilder=SpannableStringBuilder(内容)

var matches=Regex(“^((?:(!any)。)*?)(?(word1 | word2))(?![^您使用的模式有3个捕获组,其中1个组命名为
value
,您也可以省略外部捕获组

您可以使用单个捕获组,而不使用名称

^(?:(?!any).)*?(word1|word2)(?![^<]*(?<!-)>)
^(?:(?!any)。*?(word1 | word2)(?)[^

您使用的模式有3个捕获组,其中1个组命名为
value
,您也可以省略外部捕获组

您可以使用单个捕获组,而不使用名称

^(?:(?!any).)*?(word1|word2)(?![^<]*(?<!-)>)
^(?:(?!any)。*?(word1 | word2)(?)[^

如果无法使用命名的捕获组,可以使用单个捕获组
^(?:(?:(?!any)。*?)(word1 | word2)(?![^单词距字符串开头有多远?请尝试
Regex((?)”,RegexOption。忽略大小写)
如果单词前可以有到1000个字符进行着色。@第四只鸟:成功了!Thanx:-)你应该将你的回复作为答案(而不仅仅是评论)发布;这样我可以投票给你答案,这样你就可以获得信用;-)如果你不能使用命名的捕获组,也许可以使用单个捕获组
^(?(?:(!any)。*?)(word1 | word2)(?![^单词距离字符串开头有多远?请尝试
Regex(“(?)”),RegexOption。忽略大小写)
如果单词前可以有到1000个字符进行着色。@Thefourthbird:这很有效!Thanx:-)您应该将您的回复作为答案发布(而不仅仅是评论);这样我就可以投票给你答案,这样你就可以得到学分;-)