2013-01-15 55 views
0

我正在查詢歌曲數據庫,並且想要分離出包含歌曲「Tube」的行(可能會出現任意數量的字符前後,例如「Track 01. Tube - > Another song」),但不匹配歌曲「First Tube」或「Last Tube」,這些歌曲也可能有多餘字符。MySQL查詢中的匹配組與正則表達式包含一些單詞但不包含其他

我一直是這樣的查詢這樣做:

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).*'; 

但它沒有明顯的工作,它匹配「第一管」的歌曲了。

+0

老實說,我不認爲你要使用'REGEXP',除非你必須(你不這樣做)。 'REGEXP'可能是存在的最有限的正則表達式。 – inhan

+0

感謝您提供幫助。你是對的,我不必(我的代碼正在處理'LIKE'和'NOT LIKE's),但我想使用一個正則表達式,所以我可以重新使用模式匹配的外部的MySQL 。 – ehed

回答

0

如果你想在這裏使用正則表達式,我想你可能會尋找一個正則表達式更沿着這些線路:

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

這是不遠處的你有上面的LIKE語句,但它會給你一開始。

+0

感謝您的幫助。我想使用正則表達式的原因是我想使用相同的匹配mysql以外的東西,我不能簡單地說「和NOT」... – ehed

+1

我明白了。正則表達式可以超級強大,但它們在mysql中肯定有限制。祝你好運。 –

相關問題