2016-03-24 49 views
1

我需要幫助寫一個MySQL正則表達式搜索模式MySQL的REGEXP多行文本

在表中,我有一個多行文本列,例如:

行1

4926 
1615 
3872 
248 

第2排

13872;100=HA&ee 

行3

38726;100=HA&ee 

行4

3872 

行5

248 
3872;100=VA 
4926 
1615 

第6行

3872; 
248 
4926 

我想選擇至少包含一行以「3872」開頭的行的值。 在我們的例子中,正確的結果是第1,4,5和6行

感謝您的幫助!

+0

你需要行號還是包含3872行的整個值? –

回答

1

使用以下REGEXP表達:

REGEXP '(^|\n)[[:<:]]3872[[:>:]]' 

演示:

mysql> SELECT 
    -> '4926 
    '> 1615 
    '> 3872 
    '> 248' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `1`, 
    -> '13872;100=HA&ee' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `2`, 
    -> '38726;100=HA&ee' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `3`, 
    -> '3872' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `4`, 
    -> '248 
    '> 3872;100=VA 
    '> 4926 
    '> 1615' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `5`, 
    -> '3872; 
    '> 248 
    '> 4926' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `6`, 
    -> '100;3872=VA' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `7`; 
+---+---+---+---+---+---+---+ 
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 
+---+---+---+---+---+---+---+ 
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 
+---+---+---+---+---+---+---+ 
1 row in set (0.00 sec) 
+0

非常好。但是如果我想只匹配3872是在一行的開頭呢?例如,這不能匹配:100; 3872 = VA – Jeremy

+0

更新了ans以處理您提到的情況。 –

+0

不是'[[:<:]]'多餘的,因爲它前面有'(^ | \ n)',它不是一個單詞字符嗎? – geon

0

基於迪蘭蘇答案,這裏是我做的:

SELECT * FROM `table` 
where value REGEXP '(\r\n|^)[[:<:]]3872[[:>:]]' 

也許還有一個更優雅的方式。

謝謝大家