2

为什么空间会有所不同?

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

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

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

"Extra large" (Red) {2012 model}

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

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

4

2 回答 2

4

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

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

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

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

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

于 2012-09-22T01:56:03.300 回答
3

This is because you're not escaping the ().

The brackets around "Red" create a group and are not included in the match. This is the reason why the regexp without the whitespace works.

The .* in the regexp without the whitespace matches " (, then comes Red and after that ) {2012 model}. The brackets are matched by the .* operators.

The .* in the regexp with the whitespace matches " and the ( is not included in the pattern.

So the right pattern would be this:

.*Extra large.*\(Red\).*
于 2012-09-22T01:59:45.347 回答