.net 让正则表达式忽略搜索项的顺序
可能重复:.net 让正则表达式忽略搜索项的顺序,.net,regex,.net,Regex,可能重复: 我让我的用户输入一个搜索词:“foobar” 我希望将用户查询转换为与单词匹配的字符串,但忽略顺序: 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
我让我的用户输入一个搜索词:“foobar” 我希望将用户查询转换为与单词匹配的字符串,但忽略顺序:
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个单词,但我的用户将变得疯狂,并将输入更多单词
如果不忽略顺序,很简单:将空格替换为“*”,我有一个非常好的匹配项
但是我怎么能让正则表达式忽略顺序,仍然匹配两个(或更多)单词呢
我是否需要生成一个与可能的订单组合相匹配的正则表达式?我建议使用混合方法。将搜索词以|分隔的形式存储在变量$search中。然后查找
/(?:$search)。。。(?:$search)/g
其中(?:$search)重复次数等于搜索词的数量
如果匹配,则将其拆分为术语、排序并检查重复。如果没有,则匹配;如果有重复,继续下一个
您使用的是哪种.NET语言?我们可能想给出示例代码。请参见以下答案:当顺序不重要时,基本上是一系列单独的搜索,对吗?你能简单地对每个单词执行一次搜索,并且只返回所有搜索成功的结果吗?这是计划B。使用单个正则表达式需要更少的重构,而我今天很懒。