MySQL查询中的匹配组与正则表达式包含一些单词但不包含其他单词

时间:2013-01-15 03:34:33

标签: mysql regex

我正在查询歌曲数据库,并希望将包含歌曲“Tube”的行分开(可能在其前后出现任意数量的字符,例如“Track 01. Tube - > Another song” ),但不匹配歌曲“First Tube”或“Last Tube”,这些歌曲也可能有无关的角色。

我一直在使用此查询执行此操作:

SELECT * FROM `songs` WHERE `song` LIKE ('%Tube%') and song not like ('%first%') and song not like ('%last%');

但是我更喜欢使用正则表达式,以便我可以在其他地方使用相同的匹配(例如在PHP代码中)。

我试过这样的事情:

SELECT * FROM songs WHERE song REGEXP '.*(first|last){0}.*(tube).*';

但它显然不起作用,它也匹配'First Tube'歌曲。

1 个答案:

答案 0 :(得分:0)

如果你想在这里使用正则表达式,我想你可能会在这些方面更多地寻找正则表达式:

SELECT * FROM songs WHERE song REGEXP ".*Tube.*" and NOT REGEXP ".*first.*|.*last.*"

这与你上面的LIKE陈述不远,但它会给你一个开始。