我需要匹配由连字符分隔的一组字符 - 例如:
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 '';
我无法正确使用正则表达式:/
答案 0 :(得分:1)
此表达式将匹配字符串,前提是每个连字符分隔值都包含在字符串中。颜色值可以按任何顺序显示在字符串中,因此该表达式将匹配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 |
+-------+--------+---------+------+------------+---------------------+
另见这个工作方式: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 /].
编辑:我不认为这会在你使用它的情况下对你有所帮助,但我会留在这里为后人。