【问题标题】:Why does this space matter in this regular expression?为什么这个空间在这个正则表达式中很重要?
【发布时间】:2012-09-22 01:39:01
【问题描述】:

为什么空间如此重要?

select * from beds where id~'.*Extra large.* (Red).*';

select * from beds where id~'.*Extra large.*(Red).*';

第一个没有返回任何东西,第二个按照我的意愿行事。我想要匹配的一个例子是:

"Extra large" (Red) {2012 model}

我认为第一个会起作用,因为(红色)后面有一个空格?

编辑:即使我用 '\' 转义括号,我仍然不能有空格。

【问题讨论】:

    标签: sql regex postgresql


    【解决方案1】:

    问题是您没有逃脱"Red" 周围的括号。你的正则表达式应该是:

    '.*Extra large.* \(Red\).*'
    

    这使方括号成为文字方括号,但不转义它们会创建一个正则表达式组(而不是要匹配的字符)。

    您的第一个正则表达式将字符 Red 分组并在该组 Red 之前需要一个空格,因此它将匹配 "... Red...",但在您的输入中 Red 之前有一个括号,所以它不会匹配。

    您的第二个正则表达式接受Red 之前的任何字符(通过.*),因此它匹配。

    【讨论】:

      【解决方案2】:

      这是因为您没有转义 ()

      “红色”周围的括号创建一个组,不包括在匹配中。这 是没有空格的正则表达式起作用的原因。

      正则表达式中的.*没有空格匹配" (,然后是Red,然后是) {2012 model}。括号由.* 运算符匹配。

      正则表达式中的.*空格匹配",而(不包含在模式中。

      所以正确的模式应该是这样的:

      .*Extra large.*\(Red\).*
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-21
        • 1970-01-01
        • 2020-01-25
        • 2011-10-24
        相关资源
        最近更新 更多