我需要匹配由连字符分隔的一组字符 - 例如:
B-B/w-W/Br-W-Br
/ 是我需要的一部分,最多 20 个空格。
G-R-B, G/R-B-B/W-O
所以我需要一个正则表达式,它以任何顺序覆盖 - 之间(GRB 也可以是 RBG)我一直在玩一堆组合,但我无法想出与任何顺序匹配的东西。
计划是使用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: http ://sqlfiddle.com/#!2/943af/1/0
可以在此处找到将正则表达式与 MySql where 语句结合使用:http: //dev.mysql.com/doc/refman/5.1/en/pattern-matching.html
我可能从你的例子中误解了,试试这个:
-*([a-zA-Z/]+)-*
可以更改捕获区域以包含您感兴趣的特定字母,例如 [GRBWOgrbwo/]。
编辑:我认为这不会在您使用它的情况下对您有所帮助,但我会将它留在这里以供后代使用。