MySQL正则表达式匹配和不匹配多个表达式,无论顺序如何

时间:2019-04-03 23:21:27

标签: regex regex-lookarounds

我需要一个正则表达式来匹配以下3个输入字符串:

serviceType=SALE&propertyType=HOUSE&city=1
propertyType=HOUSE&serviceType=SALE&city=1
city=1&propertyType=HOUSE&serviceType=SALE
city=1&serviceType=SALE&propertyType=HOUSE
serviceType=SALE&propertyType=HOUSE
serviceType=SALE

不匹配

serviceType=SALE&propertyType=HOUSE&city=2
propertyType=HOUSE&city=2&serviceType=SALE
city=2&propertyType=HOUSE&serviceType=SALE
serviceType=SALE&propertyType=FARM&city=1
serviceType=SALE&propertyType=UNIT
serviceType=RENTAL&propertyType=HOUSE
serviceType=RENTAL

我尝试了与第一个输入字符串匹配的以下内容,但无法弄清楚其余的内容:

(?=.*serviceType=SALE)(?=.*propertyType=HOUSE)(?=.*city=1)

1 个答案:

答案 0 :(得分:2)

似乎您正在寻找这样的东西:

^serviceType=SALE(?:&propertyType=HOUSE(?:&city=1)?)?$

有关演示,请参见here

编辑

如果参数的顺序不重要,请使用此正则表达式:

^(?:(?:&|^)(?:serviceType=SALE|propertyType=HOUSE|city=1)){1,3}$

表示“ &或字符串的开头(^),后跟三个参数中的任何一个,均重复1-3次。

查看新的demo

如果您正在URL中搜索此模式,我想您应该用^替换开头的(?:^|(?<=\?)),以表明该字符串也可以带有问号。