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