Java 正则表达式整字选项

Java 正则表达式整字选项,java,regex,Java,Regex,我在java中遇到了一个匹配整个单词的问题,我想做的是找到给定行中每个单词的起始索引 Pattern pattern = Pattern.compile("("+str+")\\b"); Matcher matcher = pattern.matcher(line.toLowerCase(Locale.ENGLISH)); if(matcher.find()){ //Doing something } 我对这个案子有意见 line = "Watson has Watson's ite

我在java中遇到了一个匹配整个单词的问题,我想做的是找到给定行中每个单词的起始索引

Pattern pattern = Pattern.compile("("+str+")\\b");
Matcher matcher = pattern.matcher(line.toLowerCase(Locale.ENGLISH));
if(matcher.find()){
    //Doing something 
}
我对这个案子有意见

line = "Watson has Watson's items.";
str = "watson";
我只想在这里匹配第一个watson而不匹配另一个watson,我不想让我的模式有一些空白控制,在这种情况下我应该怎么做

在matcher中使用find()方法


请参阅单词边界
\b
匹配非单词和单词字符之间的位置(或单词字符之前/之后的开始/结束)。
-
+
等都是非单词字符,因此
Watson\b
将与
Watson的
匹配(部分匹配)

您可能只想匹配
Watson
,如果它没有包含非空白符号:

Pattern p = Pattern.compile("(?<!\\S)" + str + "(?!\\S)");


仅供参考:也许,使用
模式也是一个好主意。quote(str)
而不是普通的
str
,以避免
str
包含特殊的正则元字符时出现问题。

请澄清我不希望我的模式有一些空白控制?你对一个单词及其允许的上下文有什么要求?你知道,你可以在整个单词后面加上一个像
(?!)
这样的先行词来禁止撇号。如果你想要第一个
watson
的开始索引,为什么不使用
String#indexOf
函数呢?@WiktorStribiżew撇号只是一个例子。我想检查-、+或任何其他非单词characters@KevinEsche因为如果它包含两个沃森单词,我想在matcher组中同时获得这两个单词。撇号是一个非单词字符。你对一个词的要求是什么?允许什么样的上下文?很明显,您不能使用纯
\b
。你想如何限制它?
Pattern p = Pattern.compile("(?<!\\S)" + str + "(?![^\\s.!?])");