我想检查一个字符串是否按顺序包含“stores”、“store”和“product”这三个词,无论它们之间是什么。
我尝试使用 someString.contains(stores%store%product);
以及 .contains("stores%store%product");
我需要显式声明一个正则表达式并将其传递给方法还是根本不传递一个正则表达式?
最佳答案
String.contains
String.contains
适用于字符串,句号。它不适用于正则表达式。它将检查指定的确切字符串是否出现在当前字符串中。
请注意,String.contains
不检查单词边界;它只是检查子字符串。
正则表达式解决方案
Regex 比 String.contains
更强大,因为您可以对关键字强制执行单词边界(除其他外)。这意味着您可以将关键字搜索为 words,而不仅仅是 substrings。
将 String.matches
与以下正则表达式一起使用:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
RAW 正则表达式(删除字符串文字中的转义 - 这是您打印出上面的字符串时得到的结果):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
\b
检查单词边界,因此您不会得到与 restores store products
的匹配项。请注意,stores 3store_product
也被拒绝,因为 digit 和 _
被认为是单词的一部分,但我怀疑这种情况是否出现在自然文本中。
由于两边都检查了单词边界,所以上面的正则表达式将搜索确切的单词。换句话说,stores stores product
将不匹配上面的正则表达式,因为您正在搜索没有 s
的单词 store
。
.
通常匹配任何字符除了 a number of new line characters .开头的 (?s)
使得 .
匹配任何字符,无一异常(exception)(感谢 Tim Pietzcker 指出这一点)。
关于java - 如何在 Java 中的 String.contains() 方法中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15130309/