正则表达式匹配整个单词

5

我觉得问这个问题有点傻,但从我读过的所有内容来看,这应该是可行的,但对我来说并不是。我只是想使用正则表达式匹配字符串中的整个单词。

所以,如果我想在句子中查找单词“the”,它应该返回“the quick brown fox jumps over the lazy dog”的真实值,但对于“there quick brown fox jumps over the lazy dog”的值应为false。

我已经尝试过以下方法:

 String text = "the quick brown fox jumps over the lazy dog";
 return text.matches("\\bthe\\b");

我也尝试过以下方法:

    String text = "the quick brown fox jumps over the lazy dog";
    String regex = "\\bthe\\b";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(text);

    return matcher.matches();

我也尝试了这个正则表达式:"\bthe\b",但它们总是返回false。我觉得我可能漏掉了一些很明显的东西,因为这应该不太困难。:)


1
谢谢回答,尽管现在感觉自己更愚蠢了。 :) - Kris B
4个回答

8

如果你使用matches,它必须匹配整个字符串。也许你需要使用String#contains(...),或者你想在单词前后添加一些通配符:

String regex = ".*\\bthe\\b.*";

e.g.,

  String text = "the quick brown fox jumps over the lazy dog";
  System.out.println(text.matches(regex));

6

可能有比我的更好的答案:+1 - Hovercraft Full Of Eels

3

尝试使用这个正则表达式:

".*\\bthe\\b.*"

基本上,您要将其与字符串“the”匹配,但即使输入有其他内容,您也需要返回匹配,因此您需要在两侧都放置“.*”。


0

Bzzt!第二个句子自然会返回true,因为单词the出现了两次:The quick brown fox jumps over the lazy dog"。你的第二个句子仍然有第二个the

你的正则表达式是正确的。但是,你需要使用Pattern.find方法而不是matches,因为matches尝试与整个字符串匹配。另一方面,Pattern.find将定位与您的模式匹配的子字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接