限制 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/"
.
我有包含如下序列的字符串:
^^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/"
.