【问题标题】:Matching pound (#) or empty line comments with regex使用正则表达式匹配井号 (#) 或空行注释
【发布时间】:2021-04-30 15:42:00
【问题描述】:

首先,我使用的是 Java,如果这会影响正则表达式。

我正在尝试匹配以任意数量的空白字符开头但没有其他字符的行的内容,后跟任意数量的磅 (#),然后是任意字符,然后以新行结尾。

或者,一个只有空格或换行的完全空行。

我尝试自己找到第一部分,但它似乎与任何 cmets 都不匹配:

^(?!.+)#+.*$

即使我在结尾加上\r*\n*,它也不起作用

【问题讨论】:

  • 使用 \s 匹配空格或换行符 ^(?:\s*#.*\R|\s+) regex101.com/r/ZJJwyN/1 在 Java 中 String regex = "^(?:\\s*#.*\\R|\\s+)";
  • 我试过了,但它似乎与我的测试不匹配regexr.com/5s00b
  • 能否添加Java相关代码?仅此模式可能还不够。 ^$ 默认为字符串的开始/结束,除非您设置了 MULTILINE 标志。查看您是否正确设置了标志会很有帮助。
  • 您有一个带有s 修饰符的标志,其中点将匹配换行符,并且选择的语言是Javascript。测试应该匹配什么?像这样? ^[^\S\r\n]*(?:#.*)?\r?\nregex101.com/r/r5hoKa/1
  • 任意数量的空白字符,但没有其他... - 您的意思是开头不能有空白还是您的意思是至少有一个空白?

标签: java regex


【解决方案1】:

在您的 regexr example 中,您选择了 Javascript 并启用了 s 标志必须点匹配换行符。

如果要匹配所有行,可以改为启用多行和全局标志,并使用

^[^\S\r\n]*(?:#.*)?\r?\n

Regex demo


在 Java 中,您可以使用

^\h*(?:#.*)?\R

使用双转义反斜杠

String regex = "^\\h*(?:#.*)?\\R";

模式匹配:

  • ^ 字符串开始
  • \h* 匹配可选的水平空白字符
  • (?:#.*)? 可选匹配 # 后跟该行的其余部分
  • \R 匹配任何 Unicode 换行符序列

Regex demo

如果你想匹配整行,而不是匹配换行符,你想断言字符串的结尾,你可以使用锚点$ 而不是\R

^\h*(?:#.*)?$

Regex demo

【讨论】:

    猜你喜欢
    • 2012-10-26
    • 2013-04-20
    • 1970-01-01
    • 2011-10-29
    • 2010-11-14
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    相关资源
    最近更新 更多