正则表达式适用于在线验证器但在 java checkstyle 中失败
regex works on online validator but fails in java checkstyle
我目前是第一次使用 checkstyle,遇到了一些小问题。
我希望 checkstyle 验证包声明和后续内容之间是否有一个空行。
我找不到提供这种验证的模块,或者至少 none 也不会检查包声明和上面的内容之间是否有空行。
所以我决定使用 regexp-module 并编写一个正则表达式来实现这种验证。我试图涵盖我的规则的所有可能的错误,并且在一些在线验证器中你可以尝试你的正则表达式它没有问题。
这是正则表达式:
.+package.*;|package.*;.*\S|package.*;.*[\r\n].*\S|package.*;[\r\n]{3,}
现在,当我尝试在我的检查配置中导入它时,我总是收到消息
即使代码正确,我的规则也被违反了。
这里有一些示例代码:
package just.some.package;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
...
通常这段代码不会引发任何问题,但只要我在我的 IDE 中的 checkstyle 插件中尝试它,它总是会引发任何问题。导致问题的正则表达式片段似乎是这个:
package.*;(\r|\n){3,}
它应该只检查包声明后是否有两个以上的换行符,但如果恰好有两个,就像示例中一样,它也会触发错误。
谁能解释一下这是什么问题?
谨致问候
德姆利
您可以使用 \R
construct 来匹配换行符,
package.*;\R{3,}
[\r\n]{3,}
和 (\r|\n){3,}
都匹配,因为你有 CRLF 结尾,这意味着两行之间有 4 个 CR/LF 个字符,用空行分隔。
或者,如果您使用 Windows 行结束样式,您可以指定 (?:\r\n){3,}
模式。
我目前是第一次使用 checkstyle,遇到了一些小问题。 我希望 checkstyle 验证包声明和后续内容之间是否有一个空行。 我找不到提供这种验证的模块,或者至少 none 也不会检查包声明和上面的内容之间是否有空行。
所以我决定使用 regexp-module 并编写一个正则表达式来实现这种验证。我试图涵盖我的规则的所有可能的错误,并且在一些在线验证器中你可以尝试你的正则表达式它没有问题。
这是正则表达式:
.+package.*;|package.*;.*\S|package.*;.*[\r\n].*\S|package.*;[\r\n]{3,}
现在,当我尝试在我的检查配置中导入它时,我总是收到消息 即使代码正确,我的规则也被违反了。
这里有一些示例代码:
package just.some.package;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
...
通常这段代码不会引发任何问题,但只要我在我的 IDE 中的 checkstyle 插件中尝试它,它总是会引发任何问题。导致问题的正则表达式片段似乎是这个:
package.*;(\r|\n){3,}
它应该只检查包声明后是否有两个以上的换行符,但如果恰好有两个,就像示例中一样,它也会触发错误。
谁能解释一下这是什么问题?
谨致问候
德姆利
您可以使用 \R
construct 来匹配换行符,
package.*;\R{3,}
[\r\n]{3,}
和 (\r|\n){3,}
都匹配,因为你有 CRLF 结尾,这意味着两行之间有 4 个 CR/LF 个字符,用空行分隔。
或者,如果您使用 Windows 行结束样式,您可以指定 (?:\r\n){3,}
模式。