【问题标题】:RegEx \D matches start and end of line as wellRegEx \D 也匹配行的开始和结束
【发布时间】:2012-09-25 05:50:52
【问题描述】:

我需要找到 3 个数字和 3 个其他字符的行:我想我使用以下 RegEx:

^\d{3}\D{3}$

但是取下面的示例文本文件并运行上面的正则表达式(文本中必须有空行):

1
12
123xxx
123y


aaabb

问题是有两个匹配:123xxx(这很好),但也匹配了 123y! 我怀疑原因是“y”+行尾+下一行的开头也匹配。

如何告诉正则表达式引擎忽略以 \D 开头和结尾的行,只匹配字符,而不是位置?

【问题讨论】:

  • 你用什么来对文本执行这个正则表达式?
  • 我现在正在使用 UltraEdit
  • 选中“仅匹配整个单词”复选框。那应该可以解决它。

标签: regex pcre


【解决方案1】:

UltraEdit 中$ 的行为会根据您是否选中“仅匹配整个单词”而改变。要获得您想要的行为,您需要确保选中该选项。您的正则表达式不需要更改。

【讨论】:

    【解决方案2】:

    也许:

    /^\d{3}\D{3}$/m
    

    m 表示

    将字符串视为多行。也就是说,将“^”和“$”从匹配字符串的开头或结尾更改为匹配字符串中任何位置的任何行的开头或结尾。

    http://perldoc.perl.org/perlre.html

    我不完全了解 UltraEdit,但我希望它会有类似的东西。

    【讨论】:

      【解决方案3】:

      试试这个:

      ^\d{3}[\S]{3}$
      

      匹配 3 位数字后跟三个非空白字符的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-14
        • 2023-03-19
        • 1970-01-01
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        相关资源
        最近更新 更多