MySQL正则表达式多行文本

4

我可以帮您编写一个MySQL正则表达式搜索模式。

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

第一行

4926
1615
3872
248

Row 2

13872;100=HA&ee

第三行

38726;100=HA&ee

第四行

3872

第五行

248
3872;100=VA
4926
1615

第6行

3872;
248
4926

我希望选择包含至少一行以"3872"开头的值。 在我们的示例中,正确的结果是第1、4、5和6行
谢谢您的帮助!

你需要包含3872的行号还是整行的值? - Ashkan Mobayen Khiabani
2个回答

3

使用以下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)

很好。但是如果我只想匹配3872在行的开头怎么办?例如,这个就不应该匹配:100;3872=VA。 - Jeremy
已更新答案以处理您提到的情况。 - Dylan Su
“[[:<:]]”不是多余的吗?因为它前面有“(^|\n)”,而这并不是一个单词字符。 - geon

0
根据Dylan Su的答案,这是我所做的:
SELECT * FROM `table`
where value REGEXP '(\r\n|^)[[:<:]]3872[[:>:]]'

也许有更优雅的方式。

谢谢大家。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接