请考虑以下代码段:
String input = "Print this";
System.out.println(input.matches("\\bthis\\b"));
输出
false
这种方法可能有什么问题?如果它是错的,那么找到确切单词匹配的正确解决方案是什么?
PS:我在这里发现了各种类似的问题,但没有一个能提供我想要的解决方案。 提前谢谢。答案 0 :(得分:34)
使用matches()
方法时,它会尝试匹配整个输入。在您的示例中,输入“打印此”与模式不匹配,因为单词“Print”不匹配。
因此,您需要在正则表达式中添加一些内容以匹配字符串的初始部分,例如
.*\\bthis\\b
如果你想在行尾添加额外的文字:
.*\\bthis\\b.*
或者,使用Matcher
对象并使用Matcher.find()
在输入字符串中找到匹配:
Pattern p = Pattern.compile("\\bthis\\b");
Matcher m = p.matcher("Print this");
m.find();
System.out.println(m.group());
输出:
this
如果您想在一行中找到多个匹配项,可以反复调用find()
和group()
来全部删除。
答案 1 :(得分:9)
匹配器的完整示例方法:
public static String REGEX_FIND_WORD="(?i).*?\\b%s\\b.*?";
public static boolean containsWord(String text, String word) {
String regex=String.format(REGEX_FIND_WORD, Pattern.quote(word));
return text.matches(regex);
}
说明:
答案 2 :(得分:4)
有关详细说明,请参阅:http://www.regular-expressions.info/java.html
myString.matches(“regex”)根据是否返回true或false string可以完全由正则表达式匹配。它是 重要的是要记住String.matches()只返回true 整个字符串可以匹配。换句话说:“正则表达式”应用如同 你用字符串锚点的开头和结尾写了“^ regex $”。这个 与大多数其他正则表达式库不同,“快速匹配” 如果正则表达式可以在任何地方匹配,则test“方法返回true 串。如果myString是abc,则myString.matches(“bc”)返回false。 bc匹配abc,但是^ bc $(这里真的使用的)没有。
这写“真”:
String input = "Print this";
System.out.println(input.matches(".*\\bthis\\b"));
答案 3 :(得分:3)
您可以使用群组查找确切的字词。 Regex API通过括号指定组。例如:
A(B(C))D
此声明由三个组组成,这些组的编号为0。
因此,如果您需要查找某个特定单词,可以在Matcher
类中使用两个方法,例如:find()
来查找由regex指定的语句,然后获取String
个对象由其组号指定:
String statement = "Hello, my beautiful world";
Pattern pattern = Pattern.compile("Hello, my (\\w+).*");
Matcher m = pattern.matcher(statement);
m.find();
System.out.println(m.group(1));
上面的代码结果将是"漂亮"
答案 4 :(得分:1)
您的searchString
是正则表达式吗?如果不是简单地使用String.contains(CharSequence s)
答案 5 :(得分:0)
的System.out.println(input.matches() “* \\ bthis $。”);
也有效。这里。*匹配空格之前的任何内容,然后匹配为最后的单词。