如何在java中找到整个单词?

时间:2013-11-29 07:08:11

标签: java regex

我想在段落中搜索整个单词,单词可能以特殊字符结尾。 例如,要搜索的文本为"search:",段落为"search: no search result found".在此搜索结果中,起始索引为0,结束索引为6.

我使用的正则表达式是"\\bsarch:\\b"但是这个正则表达式转义特殊字符':'

请使用Regex帮助我在java中匹配整个单词。 以下是我的java代码

String textToBeSearch="search:";
        String regex = "\\b";
        String completeString="search: here is the string";
        String string = regex+Pattern.quote(textToBeSearch)+regex;
        Pattern pattern = Pattern.compile(string);
        Matcher matcher = pattern.matcher(completeString);
        while(matcher.find()){
            System.out.println("found");
        }

        System.out.println("done");

3 个答案:

答案 0 :(得分:0)

如果要根据变量字符串创建“动态”正则表达式,则需要通过调用Pattern.quote(String s) 转义该字符串。例如,调用Pattern.quote("[test]")将返回正则表达式:

\[test\]或更具体地说,它将返回字符串\\[test\\]

...可以用作搜索的正则表达式。

答案 1 :(得分:0)

我认为您可以使用以下正则表达式模式:

<强>模式

\b(\w+?)[\:\?\!]?\b

注意:您可以在方形支架中放置尽可能多的特殊字符,因为您希望将它们包含在搜索中。

有些编译器执行不好\ b并将:解释为新单词,因此您必须使用以下模式:

PATTERN 2

\b(\w+?)[\?\!]?\b:?

或者如果你发现它更好:

\b(\w+?)\b[:\?\!]?

JAVA CODE

      String pattern ="\\b(\\w+?)[:\\?\\!]?\\b";

      Pattern p = Pattern.compile(pattern,Pattern.CASE_INSENSITIVE);
      Matcher m = p.matcher(inputString);

      while(m.find())
      {
          //your code
      }

注意:我这里没有针对java的IDE,所以我不是100%确定代码是 ALL 好但它应该(但模式很好)。

答案 2 :(得分:0)

基本上,您想要找到用户输入的内容并希望确保它与单词的一部分不匹配?

在这种情况下,请远离\b及其堂兄\w,因为对于您认为是单词的任何内容都是完全没用的(这是一些粗略的近似值,某些编程语言是标识符,而已)。最好明确说出你想要的东西:

(?<=^|\s)search:(?=\s|$)

表示搜索词之前和之后是空格或字符串的开头/结尾。您可能希望将前瞻改为

(?=[\s.,:;'"!?)]|$)

可能允许标点符号(同样,至少是后面的左括号)。