我让我的用户输入搜索字词:“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个单词,但我的用户会疯狂,并会输入更多单词。
如果不要忽略订单,那很简单:用“。*”替换空格,我的匹配非常好。
但是我如何让正则表达式忽略顺序,仍然匹配两个(或更多)单词?
我是否需要生成一个匹配可能的订单组合的正则表达式?
答案 0 :(得分:1)
我建议使用混合方法。将搜索项[-separated]存储在变量$ search中。然后查找/(?:$search) ... (?:$search)/g
其中(?:$ search)重复的次数等于搜索项的数量。
如果匹配,则将其拆分为术语,排序并检查重复。如果没有,则匹配;如果有重复,请继续下一个。
您使用的是哪种.NET语言?我们可能想要提供示例代码。
答案 1 :(得分:1)
当订单无关紧要时,它基本上是一系列单独的搜索,对吧?您可以简单地对每个单词执行1次搜索,并且只返回所有搜索成功的结果吗?
答案 2 :(得分:0)