Java 正则表达式整字选项
我在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
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.!?])");