2013-04-25 278 views
0

我正在努力寻找一种使用正则表达式匹配两个连续整个单词的解决方案。我有一个文本框,用户可以在其中输入他们的搜索条件,并附上精确匹配的引文。引号和空格(如果有)然后由RegEx表达式替换。这里有一个例子:在正则表达式中匹配两个完整的单词

用户输入:“苹果橙”

转换为:

\bApple\W+(?:\w+\W+){1,6}?Orange\b 

然后,我正则表达式匹配将基于此转换的标准。这些说明来自www.regular-expressions.info/near.html

也许我正在进行这完全错误的方式?我正在使用visual studio。任何帮助表示赞赏。

+1

您使用哪种语言?你可以使用像[String.Contains](http://msdn.microsoft.com/en-IN/library/dy85x1sa.aspx)或[String.IndexOf](http://msdn.microsoft.com/en- IN/library/k8b1470s.aspx)而不是正则表达式。 – 2013-04-25 13:41:46

+0

我正在使用正则表达式来匹配整个单词,我不确定String.Contains或String.IndexOf可以完成此操作吗? – 2013-04-25 13:52:54

+1

您可以通过在开头和结尾处添加空格来搜索整个单词,但在您的情况下,如果我理解正确,则更多的是搜索短语。 – 2013-04-25 14:00:10

回答

2

,如果你想完全匹配当用户使用引号,那么你应该只删除引号,做直字符串比较(平等,不包含)

更新:根据意见

下面,你只需做同样的事情,一个字匹配:

字:

\bApple\b

双字

\bApple Orange\b

的想法是,用户在搜索词输入和你匹配正是出于这个,所以你不会做图案的词本身匹配,只是边界它(围绕它的\b)。没有理由去触摸搜索词本身(苹果和Orange之间的所有东西,你试图这样做),因为即使两者之间的空间是他们搜索的一部分......除非你想要做一点点flexible..for例如,如果用户在"Apple[lots of space here]Orange"进入仅计算,作为一个单一的空间,那么你可以做

\bApple\s+Orange\b

..但那么你就有种从整体偏离“精确匹配“的主题......

旁注:你在评论中说,”CrabApple OrangeCrush“你不想要”苹果橙“匹配。这就是为什么你使用\b字边界。但是如果是我的话,我会考虑到这一点。或者至少,提供某种选择来以这种方式搜索它。

+0

你能否给我提供一个简单的例子,使用平等,不包含? – 2013-04-25 13:52:10

+0

它取决于你正在使用的语言,但通常它是一个双等号'==',如在'if(a == b){// a等于b}' – 2013-04-25 13:53:25

+0

也取决于你正在搜索的内容..这是一个数据库查询?那么通常它只是一个等号,就像在'select column from table where column ='search term'''就是一个精确的匹配查找 – 2013-04-25 13:58:06

相关问题