在Java中
String term = "search engines"
String subterm_1 = "engine"
String subterm_2 = "engines"
Run Code Online (Sandbox Code Playgroud)
如果我这样做term.contains(subterm_1)会返回true.我不希望这样.我想要subterm完全匹配其中一个词term
因此,像term.contains(subterm_1)返回false和term.contains(subterm_2)返回true
Jas*_*key 38
\ b匹配单词边界,其中单词字符为[a-zA-Z0-9_].
这应该适合您,您可以轻松地重用此方法.
public class testMatcher {
public static void main(String[] args){
String source1="search engines";
String source2="search engine";
String subterm_1 = "engines";
String subterm_2 = "engine";
System.out.println(isContain(source1,subterm_1));
System.out.println(isContain(source2,subterm_1));
System.out.println(isContain(source1,subterm_2));
System.out.println(isContain(source2,subterm_2));
}
private static boolean isContain(String source, String subItem){
String pattern = "\\b"+subItem+"\\b";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(source);
return m.find();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
true
false
false
true
Run Code Online (Sandbox Code Playgroud)
我建议使用单词边界。如果你编译一个像\bengines\b 这样的模式,你的正则表达式只会匹配完整的单词。
这是对单词边界的解释,以及一些示例。 http://www.regular-expressions.info/wordboundaries.html
此外,这里是模式的 Java API,它确实包括字边界 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
这是使用上述要求的示例
Pattern p = Pattern.compile("\\bengines\\b");
Matcher m = p.matcher("search engines");
System.out.println("matches: " + m.find());
p = Pattern.compile("\\bengine\\b");
m = p.matcher("search engines");
System.out.println("matches: " + m.find());
Run Code Online (Sandbox Code Playgroud)
这是输出:
matches: true
matches: false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37152 次 |
| 最近记录: |