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

时间:2016-01-07 14:48:21

标签: 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提出的模式在这种情况下不起作用。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

在您的情况下,问题\b标志将查找标点符号,空格以及字符串的开头或结尾。开口括号不属于任何这些类别,因此被省略。

解决此问题的最简单方法是将"\\b"+keyword+"\\b"替换为"[\\b(]"+keyword+"[\\b)]"

在正则表达式语法中,方括号表示正则表达式引擎将尝试匹配其包含的任何字符的一组。

根据this之前的SO问题,似乎\b[\b]不一样。虽然\b表示单词边界,但[\b]表示退格符。要解决此问题,只需将"\\b"+keyword+"\\b"替换为"(\b|\()"+keyword+"(\b|\))"

答案 1 :(得分:1)

正则表达式应匹配0或更多字符。以下代码更改将解决问题

String regex = ".*("+keyword+").*";

答案 2 :(得分:0)

例如,您可以修改正则表达式以搜索多个字符 [^ \ w] +“for”+ [^ \ w]使用Java中的Pattern类。

供您参考: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

答案 3 :(得分:0)

基本上,您必须使您的正则表达式适应它可以找到的所有可能的模式。但考虑到您实际处理代码,您最好为该语言构建parser/tokenizer,或者使用已存在的语言。然后你所要做的就是通过代币来找到你想要的东西。