正则表达式全字选项

时间:2016-04-14 10:48:36

标签: 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 items.";
str = "watson";

我想只匹配第一个watson,而不匹配另一个,我不希望我的模式有一些空的空间控制,在这种情况下该怎么做

2 个答案:

答案 0 :(得分:1)

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

如果没有用非空格符号括起来,您可能只希望匹配Watson

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

要匹配句子末尾的Watson,您需要在.?!之前进行匹配,使用

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

请参阅regex demo

仅供参考:或许,最好还是使用Pattern.quote(str)代替普通str来避免在str包含特殊正则表达式元字符时出现问题。

答案 1 :(得分:0)

在matcher中使用find()方法

参考java docs