让正则表达式忽略搜索项的顺序

时间:2010-05-28 13:46:09

标签: .net regex

  

可能重复:
  Regular Expressions: Is there an AND operator?

我让我的用户输入搜索字词:“foo bar”。

我想将用户查询转换为与单词匹配的字符串,但忽略顺序:

bla foo bla bar   = match
    ^^^     ^^^
bla bar bla foo   = match (order = reversed)
    ^^^     ^^^
bla bla bla foo   = no match (only one word)
            ^^^
bar bla bla bla   = no match (only one word)
^^^

注意:该示例包含2个单词,但我的用户会疯狂,并会输入更多单词。

如果不要忽略订单,那很简单:用“。*”替换空格,我的匹配非常好。

但是我如何让正则表达式忽略顺序,仍然匹配两个(或更多)单词?

我是否需要生成一个匹配可能的订单组合的正则表达式?

3 个答案:

答案 0 :(得分:1)

我建议使用混合方法。将搜索项[-separated]存储在变量$ search中。然后查找/(?:$search) ... (?:$search)/g其中(?:$ search)重复的次数等于搜索项的数量。

如果匹配,则将其拆分为术语,排序并检查重复。如果没有,则匹配;如果有重复,请继续下一个。

您使用的是哪种.NET语言?我们可能想要提供示例代码。

答案 1 :(得分:1)

当订单无关紧要时,它基本上是一系列单独的搜索,对吧?您可以简单地对每个单词执行1次搜索,并且只返回所有搜索成功的结果吗?

答案 2 :(得分:0)