我有一些复杂的正则表达式,我需要对其进行注释以提高可读性和维护性。 Java 规范相当简洁,我为此努力了很长时间。我终于发现了我的错误并将其作为答案发布,但我将不胜感激有关维护正则表达式的任何其他建议
例如,我想在一个简单的名称解析器中注释(patternS 的)子组件:
String testTarget = "Waldorf T. Flywheel";
String patternS = "([A-Za-z]+)\\s+([A-Z]\\.)?\\s+([A-Za-z]+)";
Pattern pattern = Pattern.compile(patternS, Pattern.COMMENTS);
Assert.assertTrue(pattern.matcher(testTarget).matches());
编辑:如果能提供 (?x) 格式的示例,我将不胜感激。
编辑:@geowa4 有一个很好的建议,可以避免嵌入评论。 Sinnce java 和其他人提供了嵌入式注释,它们在什么情况下有用? (我想我有一个案例,但我有兴趣查看其他案例)。
编辑:如下所述,@mikej 正则表达式不支持可选的初始值,并且会更好:
String patternS = "([A-Za-z]+)\\s+([A-Z]\\.\\s+)?([A-Za-z]+)";
但这最终会在初始阶段提取空间
最佳答案
查看 Martin Fowler 发表的帖子在 ComposedRegex有关提高正则表达式可读性的更多想法。总之,他提倡将复杂的正则表达式分解成更小的部分,这些部分可以赋予有意义的变量名。例如
String mandatoryName = "([A-Za-z]+)";
String mandatoryWhiteSpace = "\\s+";
String optionalInitial = "([A-Z]\\.)?";
String pattern = mandatoryName + mandatoryWhiteSpace + optionalInitial +
mandatoryWhiteSpace + mandatoryName;
关于java - 在 Java 正则表达式中包含注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1378627/