我需要匹配以下字符串
'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)$'
它不会匹配。我最后一段的错误是什么?
答案 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}}匹配空字符串。