java - 在 Java 正则表达式中包含注释

标签 java regex comments

我有一些复杂的正则表达式,我需要对其进行注释以提高可读性和维护性。 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/

相关文章:

java - 使用通用双向链表实现 Comparable

php - 使用php获取字符串中的所有url

python - 正则表达式(Reg exp)。为什么这有效?

parsing - 如何使用 ANTLRv4 仅解析一些评论

qt - QPushButton 的工具提示

java - JNDI 说明 : JNDI API, JNDI SPI,服务提供商

java - 如果正在显示 AlertDialog,则停止其余 UI 元素事件

java - 我怎样才能加快这个 JavaScript 绘画应用程序的速度?

javascript - 检查句子中是否存在日期字符串 (dd/mm/yyyy)?

php - 按点赞数列出评论