2014-02-26 43 views
-1

我正在为我的应用程序进行搜索功能,我需要一个良好的正则表达式。此时,当用户搜索“RAC”(它是乐队名称)时,它会返回标题中包含字母“rac”的所有帖子。然而,这有点破,只能通过正则表达式来修复。我会提供一些例子,并说明是否应该包括它们。有人可以帮我写一个正则表达式吗?

  1. 狡猾的爵士 - 奇迹:不包括
  2. RAC - 放手:包含
  3. 两栖战车 - 沃尔:不包括
  4. 巴士底狱 - 劳拉 - 帕尔默(RAC混音):包含
  5. 冷战孩子 - Miracle Mile的:不包括
  6. 马曼德 - 喂我Diamons(英尺RAC):包含

有没有人有一个好的正则表达式可以帮助我?附:你可以测试你的正则表达式here

+0

这是为什么标签Java和JavaScript?你实际使用哪种语言? – Boann

回答

3

编辑:这是一个Java的解决方案 - 如果不是预期的语言,请完善你的标签

你可以使用这个词边界,区分大小写Pattern,因为这样的:

String[] inputs = {"Sir Sly - Miracle",// : DON'T INCLUDE 
     "RAC - Let Go",// : INCLUDE 
     "Amtrac - Walkin'",// : DON'T INCLUDE 
     "Bastille - Laura Palmer (RAC Remix)",// : INCLUDE 
     "Cold War Kids - Miracle Mile",// : DON'T INCLUDE 
     "MNDR - Feed Me Diamons (ft. RAC)"// : INCLUDE 
     }; 
Pattern p = Pattern.compile("\\bRAC\\b"); 
for (String input: inputs) { 
    Matcher m = p.matcher(input); 
    System.out.printf("%s --> found ? %b%n", input, m.find()); 
} 

输出

Sir Sly - Miracle --> found ? false 
RAC - Let Go --> found ? true 
Amtrac - Walkin' --> found ? false 
Bastille - Laura Palmer (RAC Remix) --> found ? true 
Cold War Kids - Miracle Mile --> found ? false 
MNDR - Feed Me Diamons (ft. RAC) --> found ? true 
0

有许多工具它可以帮助你而不是滚动你自己的解决方案。你有没有考虑Lucene

-1

类似的解决方案......但为了更有效
避免分配无用之物

String[] bands = {"Sir Sly - Miracle",// : DON'T INCLUDE 
        "RAC - Let Go",// : INCLUDE 
        "Amtrac - Walkin'",// : DON'T INCLUDE 
        "Bastille - Laura Palmer (RAC Remix)",// : INCLUDE 
        "Cold War Kids - Miracle Mile",// : DON'T INCLUDE 
        "MNDR - Feed Me Diamons (ft. RAC)",// : INCLUDE 
}; 

for(String s : bands){ 
    if(Pattern.matches(".*(RAC).*", s)) 
      System.out.printf("%s\n",s); 
} 
+0

这比Mena的答案效率低得多,效率也不高。 – Boann

相关问题