如何在 Java 中的 String.contains() 方法中使用正则表达式

2022-08-31 07:52:32

我想检查字符串是否包含该顺序中的单词“商店”,“商店”和“产品”,无论它们之间有什么。

我尝试使用和someString.contains(stores%store%product);.contains("stores%store%product");

我是否需要显式声明正则表达式并将其传递到方法上,或者我是否可以根本不传递正则表达式?


答案 1

字符串.包含

String.contains适用于字符串,句点。它不适用于正则表达式。它将检查指定的确切字符串是否出现在当前字符串中。

请注意,不检查单词边界;它只是检查子字符串。String.contains

正则表达式解决方案

正则表达式比 更强大,因为您可以在关键字上强制实施单词边界(以及其他内容)。这意味着您可以将关键字作为单词进行搜索,而不仅仅是子字符串String.contains

与以下正则表达式一起使用:String.matches

"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"

RAW正则表达式(删除在字符串文本中完成的转义 - 这是打印出上面的字符串时得到的):

(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*

检查单词边界,以便您不会获得 匹配项。请注意,这也是被拒绝的,因为数字和被认为是单词的一部分,但我怀疑这种情况出现在自然文本中。\brestores store productsstores 3store_product_

由于检查了两边的单词边界,因此上面的正则表达式将搜索确切的单词。换句话说,将不匹配上面的正则表达式,因为您正在搜索没有的单词。stores stores productstores

.通常匹配许多新行字符以外的任何字符。 在开始时,可以毫无例外地匹配任何角色(感谢Tim Pietzcker指出这一点)。(?s).


答案 2

matcher.find()做你需要的。例:

Pattern.compile("stores.*store.*product").matcher(someString).find();