代码之家  ›  专栏  ›  技术社区  ›  GvS

让正则表达式忽略搜索项的顺序[重复]

  •  1
  • GvS  · 技术社区  · 14 年前

    可能重复:
    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个单词,但是我的用户会疯狂地输入更多的单词。

    如果不忽略顺序,那么很简单:用“.*”替换空格,我有一个非常好的匹配。

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

    我需要生成一个与可能的订单组合匹配的regex吗?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Community Artem    7 年前
        2
  •  1
  •   Charles    14 年前

    我建议采用混合方法。在变量$search中存储搜索词,-分隔。然后寻找 /(?:$search) ... (?:$search)/g 在哪里?:$search)的重复次数等于搜索词的数目。

    如果匹配,则将其拆分为术语、排序并检查是否重复。如果没有,则匹配;如果有重复,则转到下一个。

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

        3
  •  1
  •   BlueMonkMN    14 年前

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