MySQL正则表达式匹配问题

时间:2015-11-06 20:21:14

标签: mysql regex

我需要匹配以下字符串

'Brown & Brown' 'Brown and Brown' 'Brown&Brown' 'B & B' 'B and B' 'B&B'

我可以

'Brown & '

使用

进行匹配
SELECT 'Brown & ' REGEXP '^(b|brown)[:space:]*(and|[.ampersand.])[:space:]*'

但是当我尝试

SELECT 'Brown & Brown' REGEXP '^(b|brown)[:space:]*(and|[.ampersand.])[:space:]*(b|brown)'

SELECT 'Brown & Brown' REGEXP '^(b|brown)[:space:]*(and|[.ampersand.])[:space:]*(b|brown)$'

它不会匹配。我最后一段的错误是什么?

1 个答案:

答案 0 :(得分:1)

这有效:

[[:space:]]

特殊字符类必须放在加倍的方括号中,例如[:space:]代替SELECT 'Brown & ' REGEXP '^(b|brown)[:space:]*(and|[.ampersand.])[:space:]*';

[:space:]工作的原因:

  • :, s, p, a, c, e被视为包含字符[.ampersand.]的字符类。
  • ., a, m, p, e, r, s, a, n, d被视为包含字符*的字符类。
  • 您允许对这些字符类(Br量词)进行零重复,因此实际匹配的字符串是第一个(b|brown)
  • 匹配如下:匹配字符串的开头,然后B匹配[:space:]*(and|[.ampersand.])匹配空字符串,r匹配[.ampersand](它&# 39;在[:space:]*字符类中的字符之间,然后{{1}}匹配空字符串。