gpt4 book ai didi

java - 正则表达式 - 不要选择双引号内的评论

转载 作者:行者123 更新时间:2023-11-29 04:42:00 25 4
gpt4 key购买 nike

我正在研究 Android (Edittext) 中的 Java 代码语法高亮显示。

使用正则表达式来突出关键字、文字、字符串、数字。

正则表达式用于突出显示字符串字符串正则表达式:"\"(.*?)\"|'(.*?)'"

评论正则表达式:"/\\*(?:.|[\\n\\r])*?\\*/|//.*+\\/\\/.*"

正则表达式选择顺序是关键字正则表达式............字符串正则表达式和最后评论正则表达式。

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

问题是

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

请浏览图像以更好地理解问题(预期输出)任何人的帮助或指导将不胜感激enter image description here

最佳答案

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

要解决此问题,您必须使用能够将给定输入文本转换为标记流的适当词法分析器。然后,您可以遍历 token 流,当您遇到需要着色的 token 时,您可以执行此操作。

这可以防止当前的问题,即输入文本的一部分与多个正则表达式匹配,因此多次着色。它阻止了它,因为输入文本的每个字符都与标记流中的一个标记相关联。


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

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

关于java - 正则表达式 - 不要选择双引号内的评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38818314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com