2010-05-28 54 views
1

可能重复的顺序:
Regular Expressions: Is there an AND operator?让正则表达式忽略搜索字词

我让用户输入搜索词:“富巴”。

我想给用户查询转换为一个相匹配的词串,而忽略了顺序:

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个字,但我的用户会去野外,并会输入更多的单词。

如果订单不容忽视,这很简单:通过更换一个空间,我有一个很好的匹配“*”。

但我怎么可以让正则表达式忽略的顺序,并且仍然匹配两个(或更多)的话吗?

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

回答

1

我推荐一种混合的方法。将搜索词| |分离存储在变量$ search中。然后查找/(?:$search) ... (?:$search)/g,其中(?:$ search)重复次数等于搜索项数。

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

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

1

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

+0

这是计划B.使用单个正则表达式需要更少的重构,而我今天很懒。 – GvS 2010-05-28 14:09:03