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

时间:2013-07-01 18:07:03

标签: 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) 我一直在玩一堆组合,但是我无法想出符合任何订单的东西。

计划是使用mysql以这种方式搜索。所以,它会像

select * from table1 where pinout REGEXP '';

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

2 个答案:

答案 0 :(得分: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

enter image description here

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  |
+-------+--------+---------+------+------------+---------------------+

另见这个工作方式:http://sqlfiddle.com/#!2/943af/1/0

将正则表达式与MySql结合使用where语句可在此处找到:http://dev.mysql.com/doc/refman/5.1/en/pattern-matching.html

答案 1 :(得分:0)

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

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

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

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