java - 仅在 Java 字符串搜索中查找整个单词

标签 java regex

我遇到了在 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/

相关文章:

regex - 我如何识别邪恶的正则表达式?

java - 在后台启动应用程序

java - 错误 : Failed to resolve: com. google.android.gms :play-services-maps:16. 1.0 不断出现

java - 如何将基于 gwt 2.5.1 的应用程序升级到 gwt 2.7.0?

java - 数组点的构造函数

php - 使用php如何检查pdf文件内容是有效还是无效

javascript - 正则表达式 - 如何计算 sql 文本中的单词?

java - 处理JSP中复杂的HashMap显示

python:从 python 字符串列表中提取 float (AUD 31.99)

python - 如何在 python 中向正则表达式添加修饰符?