我遇到了在 Java 程序中的较大模式中查找搜索模式的问题。例如,我会尝试查找所有 for
循环,但会偶然发现 formula
。我发现的大多数建议都谈到使用正则表达式搜索,例如
String regex = "\\b"+keyword+"\\b";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(searchString);
或者这个的一些变体。我遇到的问题是我正在爬行代码,而不是像书一样的文本,每个单词的两侧都有空格。例如,这将错过 for(
,我想找到它。是否有另一种聪明的方法来仅查找整个单词?
编辑:感谢您的建议。关键字从字符串的第一个条目开始的情况怎么样?例如,
class Vec {
public:
...
};
我在其中搜索class
(或者public
)。 Thanga、Austin Lee、npinti 和 Kai Iskratsch 提出的模式在这种情况下不起作用。有什么想法吗?
最佳答案
在您的情况下,问题是 \b
标志将查找标点符号、空格以及字符串的开头或结尾。左括号不属于任何这些类别,因此被省略。
解决此问题的最简单方法是将 "\\b"+keyword+"\\b"
替换为 "[\\b(]"+keyword+"[\\b)]”
。
在正则表达式语法中,方括号表示正则表达式引擎将尝试匹配其包含的任何字符的一组。
根据 this上一个SO问题,似乎 \b
和 [\b]
不一样。 \b
表示单词边界,而 [\b]
表示退格字符。要解决此问题,只需将 "\\b"+keyword+"\\b"
替换为 "(\b|\()"+keyword+"(\b|\))"
.
关于java - 仅在 Java 字符串搜索中查找整个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658054/