为什么空间会有所不同?
select * from beds where id~'.*Extra large.* (Red).*';
和
select * from beds where id~'.*Extra large.*(Red).*';
第一个没有返回,第二个按我的意愿行事。我想要匹配的一个例子是:
"Extra large" (Red) {2012 model}
我认为第一个会工作,因为有一个空格(红色)?
编辑:即使我用'\'转义括号,我仍然没有空格。
答案 0 :(得分:4)
问题是您没有在"Red"
周围转移括号。你的正则表达式应该是:
'.*Extra large.* \(Red\).*'
这使括号文字括号,但没有转义它们,它们创建一个正则表达式组(而不是匹配的字符)。
您的第一个正则表达式对字符Red
进行了分组,并且在该组Red
之前需要一个空格,因此它与"... Red..."
匹配,但在{{1}之前输入中有一个括号},所以它不匹配。
您的第二个正则表达式在Red
之前接受任何字符(通过.*
),因此匹配。
答案 1 :(得分:3)
这是因为您没有转发()
。
“红色”周围的括号会创建一个组,但不包含在匹配项中。这个 是没有空格的正则表达式的原因。
正则表达式中没有空格的.*
与" (
匹配,然后是Red
,之后是) {2012 model}
。括号由.*
运算符匹配。
正则表达式中的.*
空格与"
匹配,(
未包含在模式中。
所以正确的模式是:
.*Extra large.*\(Red\).*