Mysql RLIKE - 匹配字符串或其他字符的结尾

时间:2013-03-27 14:33:04

标签: mysql rlike

我正在尝试使用RLIKE来匹配数据字符串后跟特定字符或字符串结尾($)的位置。我只使用字符串字符($)的结尾,或者只是期望的字符,或者方括号内的任何预期字符集,但是只要我进入方括号中的预期字符OR和结束字符串字符,行尾未匹配。

以下是一个例子:

SQL数据:

CREATE TABLE test_table (id int auto_increment primary key, search_string varchar(8));
INSERT INTO test_table (search_string) VALUES("123456789");
INSERT INTO test_table (search_string) VALUES("1234567");
INSERT INTO test_table (search_string) VALUES("123456");
INSERT INTO test_table (search_string) VALUES("12345");
INSERT INTO test_table (search_string) VALUES("12345E");

对此数据的示例查询:

SELECT count(*) FROM test_table WHERE search_string RLIKE "56[7]";
# the above returns fine - 2 rows (first and second)

SELECT count(*) FROM test_table WHERE search_string RLIKE "56[7YE]";
# the above returns fine - 2 rows (rows 2 and 5) as expected

SELECT count(*) FROM test_table WHERE search_String RLIKE "56$";
# the above returns fine - 1 rows (the third) as expected as 6 is followed by end of string

SELECT count(*) FROM test_table WHERE search_string RLIKE "56[7$]";
# the above returns only 1 row and should be 2 (rows 2 and 3 - '56' should be followed by a 7 or end of string)

当它放在方括号中时,是否有一种特殊的方法来处理$字符?

2 个答案:

答案 0 :(得分:3)

正则表达式可能需要稍微调整一下。而不是56[7$],而应使用以下之一

56($|7)  
56($|[7YE])

在[]中,$试图匹配一个字面的美元符号。您正在寻找$来匹配行尾,因此它不能在方括号内。

答案 1 :(得分:0)

当我针对您的测试数据进行测试时,这个工作正常:

SELECT COUNT(*) FROM test_table WHERE search_string RLIKE '567{0,1}$'

我尝试了56($|7)并获得了第2行和第3行,但它也获得了第1行

[修改:{0,1}(一个或多个匹配)是由?代表的特殊情况,因此表达式也可以是567?$。]