1

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

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 '';

我只是无法正确使用正则表达式:/

4

2 回答 2

1

描述

如果每个连字符分隔的值都包含在字符串中,则此表达式将匹配字符串。颜色值可以以任何顺序出现在字符串中,因此该表达式将匹配W/Br-b-B/wB/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

于 2013-07-01T18:31:25.743 回答
0

我可能从你的例子中误解了,试试这个:

-*([a-zA-Z/]+)-*

可以更改捕获区域以包含您感兴趣的特定字母,例如 [GRBWOgrbwo/]。

编辑:我认为这不会在您使用它的情况下对您有所帮助,但我会将它留在这里以供后代使用。

于 2013-07-01T18:35:44.967 回答