MySQL正则表达式匹配问题

MySQL正则表达式匹配问题,mysql,regex,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

我需要匹配以下字符串

'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)$'
特殊字符类必须放在双方括号中,例如
[[:space:]
而不是
[:space:]


选择“Brown&'REGEXP'^(b|Brown)[:space:]*(和|[.ampersand.])[:space:]*”的原因工作:

  • [:space:
    被视为一个字符类,其中包含字符
    :、s、p、a、c、e
  • [.ampersand.]
    被视为一个字符类,其中包含字符
    、a、m、p、e、r、s、a、n、d
  • 这些字符类(
    *
    量词)允许零次重复,因此实际匹配的字符串是第一个
    Br
  • 它的匹配方式如下:匹配字符串的开头,然后是
    (b | brown)
    匹配
    b
    [:space:*
    匹配空字符串,
    (和|[.ampersand.])
    匹配
    r
    (它在
    [.ampersand]
    字符类中的字符中),然后是
    [:space:*
    匹配空字符串
事实上,它只在使用二进制模式时才起作用。您确定可以与第一个正则表达式匹配吗?所有
[:space:][/code>必须放入类似
[:space:][]
的字符类中。这似乎有效。奇怪的是
SELECT'Brown&'REGEXP'^(b|Brown)[:space:]*(和|[.ampersand.])[:space::].
SELECT'&'REGEXP'[.ampersand.]时返回1。
返回0和
SELECT'&'REGEXP'[.ampersand.].].
返回1。干得好<代码>
SELECT 'Brown & Brown' REGEXP '^(b|brown)[[:space:]]*(and|[[.ampersand.]])[[:space:]]*(b|brown)$'