如何在Java中使用正则表达式找到确切的单词?

时间:2012-02-27 11:28:39

标签: java regex

请考虑以下代码段:

String input = "Print this";
System.out.println(input.matches("\\bthis\\b"));

输出

false

这种方法可能有什么问题?如果它是错的,那么找到确切单词匹配的正确解决方案是什么?

PS:我在这里发现了各种类似的问题,但没有一个能提供我想要的解决方案。 提前谢谢。

6 个答案:

答案 0 :(得分:34)

使用matches()方法时,它会尝试匹配整个输入。在您的示例中,输入“打印此”与模式不匹配,因为单词“Print”不匹配。

因此,您需要在正则表达式中添加一些内容以匹配字符串的初始部分,例如

.*\\bthis\\b

如果你想在行尾添加额外的文字:

.*\\bthis\\b.*

或者,使用Matcher对象并使用Matcher.find()在输入字符串中找到匹配

    Pattern p = Pattern.compile("\\bthis\\b");
    Matcher m = p.matcher("Print this");
    m.find();
    System.out.println(m.group());

输出:

this

如果您想在一行中找到多个匹配项,可以反复调用find()group()来全部删除。

答案 1 :(得分:9)

匹配器的完整示例方法:

public static String REGEX_FIND_WORD="(?i).*?\\b%s\\b.*?";

public static boolean containsWord(String text, String word) {
    String regex=String.format(REGEX_FIND_WORD, Pattern.quote(word));
    return text.matches(regex);
}

说明:

  1. (?i) - ignorecase
  2. 。*? - 在
  3. 之前允许(可选)任何字符
  4. \ b - 字边界
  5. %s - 由String.format更改的变量(引用以避免正则表达式 误差)
  6. \ b - 字边界
  7. 。*? - 允许(选择性地)
  8. 之后的所有字符

答案 2 :(得分:4)

有关详细说明,请参阅:http://www.regular-expressions.info/java.html

  

myString.matches(“regex”)根据是否返回true或false   string可以完全由正则表达式匹配。它是   重要的是要记住String.matches()只返回true   整个字符串可以匹配。换句话说:“正则表达式”应用如同   你用字符串锚点的开头和结尾写了“^ regex $”。这个   与大多数其他正则表达式库不同,“快速匹配”   如果正则表达式可以在任何地方匹配,则test“方法返回true   串。如果myString是abc,则myString.matches(“bc”)返回false。   bc匹配abc,但是^ bc $(这里真的使用的)没有。

这写“真”:

String input = "Print this";
System.out.println(input.matches(".*\\bthis\\b"));

答案 3 :(得分:3)

您可以使用群组查找确切的字词。 Regex API通过括号指定组。例如:

A(B(C))D

此声明由三个组组成,这些组的编号为0。

  • 第0组 - ABCD
  • 第一组 - BC
  • 第二组 - C

因此,如果您需要查找某个特定单词,可以在Matcher类中使用两个方法,例如:find()来查找由regex指定的语句,然后获取String个对象由其组号指定:

String statement = "Hello, my beautiful world";
Pattern pattern = Pattern.compile("Hello, my (\\w+).*");
Matcher m = pattern.matcher(statement);
m.find();
System.out.println(m.group(1));

上面的代码结果将是"漂亮"

答案 4 :(得分:1)

您的searchString正则表达式吗?如果不是简单地使用String.contains(CharSequence s)

答案 5 :(得分:0)

的System.out.println(input.matches() “* \\ bthis $。”);

也有效。这里。*匹配空格之前的任何内容,然后匹配为最后的单词。