0

我正在尝试使用 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)

有没有一种特殊的方法来处理方括号中的 $ 字符?

4

2 回答 2

3

正则表达式可能只需要稍作调整。相反,56[7$]您应该使用以下之一

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

在 [] 中,$ 试图匹配文字美元符号。相反,您正在寻找 $ 以匹配行尾,因此它不能在方括号内。

于 2013-03-27T14:45:14.390 回答
1

当我对您的测试数据进行尝试时,这个有效:

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

我试过56($|7)了,它有第 2 行和第 3 行,但它也有第 1 行

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

于 2013-03-27T14:51:48.650 回答