为什么这个空间在这个正则表达式中很重要?

时间:2012-09-22 01:39:01

标签: sql regex postgresql

为什么空间会有所不同?

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

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

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

"Extra large" (Red) {2012 model}

我认为第一个会工作,因为有一个空格(红色)?

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

2 个答案:

答案 0 :(得分:4)

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

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

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

您的第一个正则表达式对字符Red进行了分组,并且在该组Red之前需要一个空格,因此它与"... Red..."匹配,但在{{1}之前输入中有一个括号},所以它不匹配。

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

答案 1 :(得分:3)

这是因为您没有转发()

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

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

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

所以正确的模式是:

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