正则表达式主要用来查询和替换符合某个模式(规则)的文本内容。例如,从一个文件中提取电话号码,查找一篇文章中重复的单词、替换文章中的敏感语汇等,这些地方都可以使用正则表达式。正则表达式强大且灵活,常用于非常复杂的查询。在Halo数据库的MySQL模式中,使用REGEXP 关键字指定正则表达式的字符匹配模式,其基本语法格式如下:
属性名 REGEXP '匹配方式'
其中,“属性名”表示需要查询的字段名称;“匹配方式”表示以哪种方式来匹配查询。“匹配方式”中有很多的模式匹配字符,它们分别表示不同的意思。下表列出了 REGEXP 操作符中常用的匹配方式。

接下来,我们在Halo数据的MySQL模式进行测试,首先我们准备测试数据:
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (id int, name VARCHAR(15));
INSERT INTO t1 VALUES(1,'street'),(12,'string'),(123,'strategy'),(3,'uustrategy'),(344,'strategystr');
INSERT INTO t1 VALUES(5,'iamok'),(51,'areuok'),(55,'areuokk'),(666,'ok'),(67,'OK'),(68,'kkkk'),(698,'kkkkk');
INSERT INTO t1 VALUES(7,'mark'),(80,'margin'),(09,'supmarket'),(99,'mar'),(999,'MAR');
SELECT * FROM t1 ORDER BY id, name;INSERT INTO t1 VALUES(1,'street'),(12,'string'),(123,'strategy'),(3,'uustrategy'),(344,'strategystr');
INSERT INTO t1 VALUES(5,'iamok'),(51,'areuok'),(55,'areuokk'),(666,'ok'),(67,'OK'),(68,'kkkk'),(698,'kkkkk');
INSERT INTO t1 VALUES(7,'mark'),(80,'margin'),(09,'supmarket'),(99,'mar'),(999,'MAR');
SELECT * FROM t1 ORDER BY id, name;
字符^用来匹配以特定字符或字符串开头的记录。
SELECT id,name FROM t1 WHERE name REGEXP '^st';
SELECT id,name FROM t1 WHERE name REGEXP '^iam';
SELECT id,name FROM t1 WHERE name REGEXP '^MAR';
SELECT id,name FROM t1 WHERE name REGEXP '^ok';
SELECT id,name FROM t1 WHERE name REGEXP '^[aeiou]|ok$';
字符$用来匹配以特定字符或字符串结尾的记录。
SELECT id,name FROM t1 WHERE name REGEXP 'gy$';
SELECT id,name FROM t1 WHERE name REGEXP 'ok$';
SELECT id,name FROM t1 WHERE name REGEXP 'OK$';
SELECT id,name FROM t1 WHERE name REGEXP 'oKk$';
字符.用来替代字符串中的任意一个字符。
SELECT id,name FROM t1 WHERE name REGEXP 'gy.';
SELECT id,name FROM t1 WHERE name REGEXP 'o.k';
SELECT id,name FROM t1 WHERE name REGEXP '.OK';
SELECT id,name FROM t1 WHERE name REGEXP '.';
字符*和+都可以匹配多个该符号之前的字符。不同的是,+表示至少一个字符,而*可以表示 0 个字符。
--a*
SELECT id,name FROM t1 WHERE name REGEXP '[ate*]';
SELECT id,name FROM t1 WHERE name REGEXP '[ok*]';
SELECT id,name FROM t1 WHERE name REGEXP '[*ok]';
--a+
SELECT id,name FROM t1 WHERE name REGEXP '[ate+]';
SELECT id,name FROM t1 WHERE name REGEXP '[ok+]';
SELECT id,name FROM t1 WHERE name REGEXP '[+ok]';
匹配指定字符串。当表中的记录包含这个字符串时,就可以将该记录查询出来。指定多个字符串时,需要用|隔开。只要匹配这些字符串中的任意一个即可。
SELECT id,name FROM t1 WHERE name REGEXP 'ate';
SELECT id,name FROM t1 WHERE name REGEXP 'ate|ok';
使用方括号[ ]可以将需要查询的字符组成一个字符集合。只要记录中包含方括号中的任意字符,该记录就会被查询出来。例如,通过“[abc]”可以查询包含 a、b 和 c 等 3 个字母中任意一个的记录。
SELECT id,name FROM t1 WHERE name REGEXP '[ok]';
SELECT id,name FROM t1 WHERE name REGEXP '^[sm]';
SELECT id,name FROM t1 WHERE name REGEXP '^[ok]';
SELECT id,name FROM t1 WHERE name REGEXP '[yg]$';
[^字符集合]用来匹配不在指定集合中的任何字符。
SELECT id,name FROM t1 WHERE name REGEXP '[^st]';
SELECT id,name FROM t1 WHERE name REGEXP '[^str]';
SELECT id,name FROM t1 WHERE name REGEXP '[^street]';
SELECT id,name FROM t1 WHERE name REGEXP '[^streetstr]';
SELECT id,name FROM t1 WHERE name REGEXP '[^streetstring strategy]';
字符串{n,}表示字符串连续出现 n 次;字符串{n,m}表示字符串连续出现至少 n 次,最多 m 次。
SELECT id,name FROM t1 WHERE name REGEXP 'k{0,2}';
SELECT id,name FROM t1 WHERE name REGEXP 'k{1,3}';
SELECT id,name FROM t1 WHERE name REGEXP 'k{1,4}';
SELECT id,name FROM t1 WHERE name REGEXP 'k{1,5}';
以上就是Halo数据库正则表达式的相关内容,感谢读到此处。




