MySQL REGEXP 查找单词,然后查找非逗号字符,直到结束行

MySQL REGEXP to find a word and then non-comma characters till end line

我想要一个 MySQL 正则表达式模式,它查看逗号分隔的名称,如果所有名称都必须与 Covid 实验室打交道,则结果为 1/True,如果不是,则结果为 0/False。下面的一些示例具有预期的行为:

SET @pattern = 'some regexp pattern'
-- example 1:
SELECT 'COVID-19 Positive Lab Results' REGEXP @pattern;
>>> 1

--example 2:
SELECT 'COVID-19 Positive Lab Results, Traveling Test, COVID-19 Pending Lab Results REGEXP @pattern;
>>> 0

--example 3:
SELECT 'COVID-19 Positive Lab Results, COVID-19 Pending Lab Result - ABC'
REGEXP @pattern;
>>> 1

我目前的模式是'(covid.*[lab|test].*,)*.*covid.*[lab|test]([^,])+$'

我的想法是 (covid.*[lab|test].*,)* 会找到 0 个或任何不间断数量的必须处理 covid lab/test 结果的条目然后我会要求它以 .*covid.*[lab|test]([^,])+$ 结束Covid 实验室结果模式。现在这两个部分都不起作用:

第一个 returns 1 用于: 'COVID-19 Positive Lab Results, Traveling Test, COVID-19 Pending Lab Results, COVID-19 test'

和第二个 returns 1 用于: 'COVID-19 Positive Lab Results, ab'

解决方案不必是正则表达式就很清楚

您可以使用

^[^,]*covid[^,]*(lab|test)[^,]*(,[^,]*covid[^,]*(lab|test)[^,]*)*$

详情

  • ^ - 字符串开头
  • [^,]*covid[^,]*(lab|test)[^,]* - 逗号以外的零个或多个字符,covid 子字符串,逗号以外的零个或多个字符,labtest,零或逗号以外的更多字符
  • (,[^,]*covid[^,]*(lab|test)[^,]*)* - 零个或多个逗号序列,零个或多个逗号以外的字符,covid 子字符串,零个或多个逗号以外的字符,labtest,逗号以外的零个或多个字符
  • $ - 字符串结尾。

其中一个问题是您使用了 bracket expression ([...]) instead of a grouping construct ((...))。