Java Regex-don';t选择双引号内的注释

Java Regex-don';t选择双引号内的注释,java,android,regex,android-edittext,Java,Android,Regex,Android Edittext,我正在研究Android中的Java代码语法突出显示(Editext) 使用正则表达式突出显示关键字、文字、字符串和数字 正则表达式am用于突出显示字符串 字符串正则表达式:“\”(.*)\“|”(.*)” 注释正则表达式:“/\\*(?:.\\[\\n\\r])*?\\*/\\\*/.+\/\\/.*” 正则表达式选择的顺序是关键字正则表达式……….字符串正则表达式和最后一个注释正则表达式 上面的正则表达式正确地选择了普通字符串和注释,但是 问题是 双引号内的注释也会突出显示。 我想忽略双引号

我正在研究Android中的Java代码语法突出显示(Editext)

使用正则表达式突出显示关键字、文字、字符串和数字

正则表达式am用于突出显示字符串 字符串正则表达式:
“\”(.*)\“|”(.*)”

注释正则表达式:
“/\\*(?:.\\[\\n\\r])*?\\*/\\\*/.+\/\\/.*”

正则表达式选择的顺序是关键字正则表达式……….字符串正则表达式和最后一个注释正则表达式

上面的正则表达式正确地选择了普通字符串和注释,但是

问题是

双引号内的注释也会突出显示。 我想忽略双引号内的注释选择

请浏览图片,以便更好地理解问题(预期输出)
任何人的帮助或指导都将不胜感激

对我来说,似乎你只是在搜索每个正则表达式的所有匹配项。如果正则表达式匹配,则为匹配项上色。因此,您将用上一个匹配的颜色覆盖上一个匹配的颜色

要解决这个问题,您必须使用适当的lexer,该lexer能够将给定的输入文本转换为令牌流。然后,您可以在令牌流上运行,当您遇到需要着色的令牌时,您可以这样做

这防止了当前的问题,即输入文本的一部分由多个正则表达式匹配,从而多次着色。它会阻止它,因为输入文本的每个字符都与令牌流中的一个令牌关联


使用第一个最长匹配算法的lexer的工作原理如下:它搜索从输入文本开头开始的所有正则表达式匹配。它选择匹配时间最长的正则表达式。如果有多个正则表达式共享最长的匹配,它将选择第一个正则表达式。现在lexer创建令牌流的第一个令牌。令牌由令牌类型(由正则表达式给出)、匹配的开始位置和结束位置组成。接下来,lexer通过再次执行上述操作来搜索下一个令牌。但是,这一次,它将搜索从上一个标记的结束位置开始的匹配项。lexer执行此操作,直到完整的输入文本转换为令牌流,或者直到遇到无效输入


这里的重要部分是,令牌
n
的结束位置与令牌
n+1
的开始位置相同。因此,没有重叠,因此始终只有一种颜色。

给我们一些输入和预期输出/突出显示的示例会很好:)@NikolasCharalambidis感谢您的快速响应。我用图片更新了问题。请看一看:)我不知道Editext是如何工作的,但您是否尝试过交换规则?这些类型的突出显示引擎确实提供了定义优先顺序的方法。@GhostCat正则表达式是用于lexer的正确工具,这就是语法突出显示所使用的。@Lucastzesniewski。。。uups,有道理。今天学到了新东西()