限制 REGEX 中多字符通配符的范围

limit scope of multi-character wildcard in REGEX

我有包含如下序列的字符串:

^^fruit/citrus^fruit/citrus/orange^meat^vegetables/carrot^^
^^fruit/citrus^vegetables^vegetables/carrot^^
^^fruit/citrus/orange^vegetables/carrot^^
^^fruit/citrus/lemon^vegetables/potatoe^^

序列中的步骤用 ^ 字符分隔。

我希望能够使用多字符通配符来搜索这些字符串,但是通配符应该只在一个步骤的范围内起作用。例如这个伪查询:

^^[fruit/*]^vegetables/*^^

应该匹配以任何以“fruit/”开头的步骤和以“vegetables/”开头的步骤开头的所有序列。所以这些应该匹配:

^^fruit/citrus/orange^vegetables/carrot^^
^^fruit/citrus/orange^vegetables/potatoe^^

但不是这些:

^^fruit/citrus^fruit/citrus/orange^meat^vegetables/carrot^^
^^fruit/citrus^vegetables^vegetables/carrot^^

在 MySQL(5.6 或 8.0)REGEX 中有解决这个问题的方法吗?我从哪里开始?

你可以像这样使用正则表达式

^\^{2}fruit/[^^]*\^vegetables/

regex demo详情:

  • ^ - 字符串开头
  • \^{2} - ^^ 子字符串
  • fruit/ - 固定文本
  • [^^]* - ^
  • 以外的零个或多个字符
  • \^vegetables/ - ^vegetables/ 字符串。

在 MySQL 中,记得在正则表达式转义中使用双反斜杠 ("^\^{2}fruit/[^^]*\^vegetables/")。类似于 SELECT col from table1 WHERE col REGEXP "^\^{2}fruit/[^^]*\^vegetables/".