如何在 Java 中的 String.contains() 方法中使用正则表达式
我想检查字符串是否包含该顺序中的单词“商店”,“商店”和“产品”,无论它们之间有什么。
我尝试使用和someString.contains(stores%store%product);
.contains("stores%store%product");
我是否需要显式声明正则表达式并将其传递到方法上,或者我是否可以根本不传递正则表达式?
我想检查字符串是否包含该顺序中的单词“商店”,“商店”和“产品”,无论它们之间有什么。
我尝试使用和someString.contains(stores%store%product);
.contains("stores%store%product");
我是否需要显式声明正则表达式并将其传递到方法上,或者我是否可以根本不传递正则表达式?
String.contains
适用于字符串,句点。它不适用于正则表达式。它将检查指定的确切字符串是否出现在当前字符串中。
请注意,不检查单词边界;它只是检查子字符串。String.contains
正则表达式比 更强大,因为您可以在关键字上强制实施单词边界(以及其他内容)。这意味着您可以将关键字作为单词进行搜索,而不仅仅是子字符串。String.contains
与以下正则表达式一起使用:String.matches
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
RAW正则表达式(删除在字符串文本中完成的转义 - 这是打印出上面的字符串时得到的):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
检查单词边界,以便您不会获得 匹配项。请注意,这也是被拒绝的,因为数字和被认为是单词的一部分,但我怀疑这种情况出现在自然文本中。\b
restores store products
stores 3store_product
_
由于检查了两边的单词边界,因此上面的正则表达式将搜索确切的单词。换句话说,将不匹配上面的正则表达式,因为您正在搜索没有的单词。stores stores product
store
s
.
通常匹配除许多新行字符以外的任何字符。 在开始时,可以毫无例外地匹配任何角色(感谢Tim Pietzcker指出这一点)。(?s)
.
matcher.find()
做你需要的。例:
Pattern.compile("stores.*store.*product").matcher(someString).find();