- 我已經在此共享我的示例代碼。在這裏我試圖找到帶有不同字符串的字「引擎」。我用字邊界來匹配字符串中的單詞。
- 它匹配單詞,如果它以#engine開頭(示例)。
它應該只匹配確切的單詞。如何在java中使用模式匹配器找到匹配的確切單詞
private void checkMatch() { String source1 = "search engines has "; String source2 = "search engine exact word"; String source3 = "enginecheck"; String source4 = "has hashtag #engine"; String key = "engine"; System.out.println(isContain(source1, key)); System.out.println(isContain(source2, key)); System.out.println(isContain(source3, key)); System.out.println(isContain(source4, key)); } private boolean isContain(String source, String subItem) { String pattern = "\\b" + subItem + "\\b"; Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(source); return m.find(); } **Expected output** false true false false **actual output** false true false true
回答
對於這種情況,你必須使用正則表達式,而不是單詞邊界OR。 \\b
匹配單詞char和非單詞char(反之亦然)。因此,您的正則表達式應在#engine
中找到匹配項,因爲#
是非單詞字符。
private boolean isContain(String source, String subItem) {
String pattern = "(?m)(^|\\s)" + subItem + "(\\s|$)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(source);
return m.find();
}
或
String pattern = "(?<!\\S)" + subItem + "(?!\\S)";
其返回true爲所有的情況@Avinash –
看到這個演示https://regex101.com/r/yA3pD8/1 –
和https://regex101.com/r/yA3pD8/2 –
如下改變你的模式。
String pattern = "\\s" + subItem + "\\b";
如果您正在尋找封閉用空格或開始/結束的字符串字面文字,你可以用一個單純的空白格式,如:\s+
分割字符串,並檢查是否有任何塊等於搜索文本。
String s = "Can't start the #engine here, but this engine works";
String searchText = "engine";
boolean found = Arrays.stream(s.split("\\s+"))
.anyMatch(word -> word.equals(searchText));
System.out.println(found); // => true
正則表達式到
String pattern = "\\s"+subItem + "\\s";
我使用
\ S空白字符:[\噸\ n \ X0B \˚F \ r]
欲瞭解更多信息窺視java.util.regex.Pattern的javadoc
此外,如果你想支持串這樣的:通過將結束/開始行終止
"has hashtag engine"
"engine"
可以提高它(^和$) 使用此模式:
String pattern = "(^|\\s)"+subItem + "(\\s|$)";
- 1. 如何在Java中找到多個模式(使用匹配器)
- 2. 在java中使用正則表達式匹配確切詞
- 3. 如何在java中使用模式和匹配器來查找匹配數量?
- 4. PHP Preg_match匹配確切單詞
- 5. 如何使用Lucene在單個詞語中找到匹配
- 6. SQL:如何在文本中查找單詞的精確匹配
- 7. Java匹配器找不到匹配,即使正則表達式單獨工作
- 8. Java模式/匹配器
- 9. 切匹配的模式從
- 10. 使用NSString找到匹配後的詞
- 11. 有關單詞的html5模式匹配
- 12. Java模式匹配
- 13. 如何通過SPARQL匹配一個確切的單詞
- 14. xsl:模板匹配找不到匹配
- 15. 使用Java模式和匹配器將XML單詞插入到MySQL
- 16. 如何使用LINQ匹配單詞
- 17. 如何使用OMetaJS匹配單詞?
- 18. SQL精確匹配列中的單詞
- 19. 模式匹配不匹配
- 20. 的Java模式匹配特定模式來匹配
- 21. 正則表達式設置單詞字符和匹配確切的單詞
- 22. 如何使用模式匹配Scala中
- 23. 如何在excel中使用匹配函數匹配精確值?
- 24. 如何不匹配mod_rewrite中的單詞
- 25. 如何正則表達式匹配一切,但長單詞?
- 26. 使用正則表達式匹配數字和單詞的確切數量 - Python27
- 27. 如何在命令行中匹配另一個模式的目錄中找到匹配模式的文件?
- 28. 在elasticsearch中使用精確的單詞匹配開始?
- 29. 模式和匹配器的Java問題
- 30. grep匹配一個單詞,但不匹配另一個單詞
如果字符串包含整個單詞'engine',您只需要得到真或假?而且:你只是在尋找文字文字嗎? –
對於確切的字符串,正則表達式搜索並不是真正的高性能。只要刪除'\ b's(java.util.Matcher將切換到字符串搜索),並檢查邊界是否爲空白。 – CoronA