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)$'