Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何匹配以任意顺序分隔的连字符_Mysql_Regex - Fatal编程技术网

Mysql 如何匹配以任意顺序分隔的连字符

Mysql 如何匹配以任意顺序分隔的连字符,mysql,regex,Mysql,Regex,我需要匹配一组由连字符分隔的字符-例如: B-B/w-W/Br-W-Br 如果/是我需要的部分,最多20个空间 G-R-B, G/R-B-B/W-O 所以我需要一个正则表达式,它以任意顺序覆盖-(G-R-B也可以是R-B-G) 我一直在玩一些combo's,但我想不出符合任何订单的东西 计划是使用mysql以这种方式进行搜索。所以,它会是这样的 select * from table1 where pinout REGEXP ''; 我只是无法正确地获取正则表达式://说明 如果字符串中包

我需要匹配一组由连字符分隔的字符-例如:

B-B/w-W/Br-W-Br
如果/是我需要的部分,最多20个空间

G-R-B, G/R-B-B/W-O
所以我需要一个正则表达式,它以任意顺序覆盖-(G-R-B也可以是R-B-G) 我一直在玩一些combo's,但我想不出符合任何订单的东西

计划是使用mysql以这种方式进行搜索。所以,它会是这样的

select * from table1 where pinout REGEXP '';
我只是无法正确地获取正则表达式://

说明 如果字符串中包含每个以连字符分隔的值,则此表达式将与字符串匹配。颜色值可以以任何顺序出现在字符串中,因此此表达式将与
W/Br-b-b/W
b/W-W/Br-b
匹配。。。或包括这些颜色的任何其他组合

^                 # match the start to of the string
(?=.*?(?:^|-)W\/Br(?=-|$))    # require the string to have a w/br
(?=.*?(?:^|-)b(?=-|$))        # require the string to have a b
(?=.*?(?:^|-)B\/w(?=-|$))     # require the string to have a b/w
.*                # match the entire string

MySql并不真正支持环顾四周,因此需要将其分解为一组where语句

mysql> SELECT * FROM dog WHERE ( color REGEXP '.*(^|-)W\/Br(-|$)' and color REGEXP '.*(^|-)b(-|$)' and color REGEXP '.*(^|-)B\/w(-|$)' );

+-------+--------+---------+------+------------+---------------------+
| name  | owner  | species | sex  | birth      | color               |
+-------+--------+---------+------+------------+---------------------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | B-B/w-W/Br-W-Br     |
| Buffy | Harold | dog     | f    | 1989-05-13 | G-R-B, G/R-B-B/W-O  |
+-------+--------+---------+------+------------+---------------------+
另请参见此工作sqlfiddle:

将正则表达式与MySql where语句结合使用可在此处找到:

Description 如果字符串中包含每个以连字符分隔的值,则此表达式将与字符串匹配。颜色值可以以任何顺序出现在字符串中,因此此表达式将与
W/Br-b-b/W
b/W-W/Br-b
匹配。。。或包括这些颜色的任何其他组合

^                 # match the start to of the string
(?=.*?(?:^|-)W\/Br(?=-|$))    # require the string to have a w/br
(?=.*?(?:^|-)b(?=-|$))        # require the string to have a b
(?=.*?(?:^|-)B\/w(?=-|$))     # require the string to have a b/w
.*                # match the entire string

MySql并不真正支持环顾四周,因此需要将其分解为一组where语句

mysql> SELECT * FROM dog WHERE ( color REGEXP '.*(^|-)W\/Br(-|$)' and color REGEXP '.*(^|-)b(-|$)' and color REGEXP '.*(^|-)B\/w(-|$)' );

+-------+--------+---------+------+------------+---------------------+
| name  | owner  | species | sex  | birth      | color               |
+-------+--------+---------+------+------------+---------------------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | B-B/w-W/Br-W-Br     |
| Buffy | Harold | dog     | f    | 1989-05-13 | G-R-B, G/R-B-B/W-O  |
+-------+--------+---------+------+------------+---------------------+
另请参见此工作sqlfiddle:


将正则表达式与MySql where语句结合使用可在此处找到:

我可能误解了您的示例,请尝试以下方法:

-*([a-zA-Z/]+)-*
捕获区域可以更改为包含您的特定兴趣字母,例如[GRBWOgrbwo/]


编辑:我认为这对您使用它的环境没有帮助,但我将把它留给子孙后代。

我可能误解了您的示例,请尝试以下方法:

-*([a-zA-Z/]+)-*
捕获区域可以更改为包含您的特定兴趣字母,例如[GRBWOgrbwo/]


编辑:我认为这对您使用它的环境没有帮助,但我将把它留给后代。

如何
[RGB]-[RGB]-[RGB]-[RGB]
?(这可以写得更简洁,但我认为这最能说明问题)为了清楚起见,您能否添加目标字符串和所需匹配子字符串的完整示例?B-B/w-w/Br-w-Br是将要搜索的实际字符串。这将从1-15种颜色变化-其中B=黑色,B/W=黑色和白色,依此类推。其想法是搜索接线图数据,但我希望避免必须按非常特定的顺序进行搜索。这回答了你的问题吗?你想从字符串中提取什么?如何
[RGB]-[RGB]-[RGB]
?(这可以写得更简洁,但我认为这最能说明问题)为了清楚起见,您能否添加目标字符串和所需匹配子字符串的完整示例?B-B/w-w/Br-w-Br是将要搜索的实际字符串。这将从1-15种颜色变化-其中B=黑色,B/W=黑色和白色,依此类推。其想法是搜索接线图数据,但我希望避免必须按非常特定的顺序进行搜索。这回答了你的问题吗?你想从这些线中提取什么?哈哈,猫和狗的接线图。我喜欢+1代表令人敬畏。(也因为你有疯狂的正则表达式技能)我遵循这里的逻辑——但在实践中并不完全有效<代码>mysql>从部分连接中选择*,其中导线颜色REGEXP'^(?=.*(?:^ |-)W\/Br(?=-$)(?=.*(?:^ |-)b(?=-$)(?=*(?:^ |-)b\/W(?=-$)*;错误1139(42000):从regexp获得错误“repeation operator operator invalid”,因此我怀疑\+被视为重复运算符。我不知道如何解决这个问题。很抱歉,我忘了mysql不支持lookarounds。相反,它需要一组
where
子句。我更新了答案并提供了一个sqlfiddle:太棒了-谢谢。现在我需要让这个php表单使用它:Dlol,猫和狗的接线图。我喜欢+1代表令人敬畏。(也因为你有疯狂的正则表达式技能)我遵循这里的逻辑——但在实践中并不完全有效<代码>mysql>从部分连接中选择*,其中导线颜色REGEXP'^(?=.*(?:^ |-)W\/Br(?=-$)(?=.*(?:^ |-)b(?=-$)(?=*(?:^ |-)b\/W(?=-$)*;错误1139(42000):从regexp获得错误“repeation operator operator invalid”,因此我怀疑\+被视为重复运算符。我不知道如何解决这个问题。很抱歉,我忘了mysql不支持lookarounds。相反,它需要一组
where
子句。我更新了答案并提供了一个sqlfiddle:太棒了-谢谢。现在我需要让这个php表单使用它:D