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

标签 java regex string

我想检查一个字符串是否按顺序包含“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/

相关文章:

Android并计算给定字体和字体大小的单行字符串的大小?

java - Android:多列 ArrayList 到 Listview

java - ListFragment 类中的 DragSortListView 库和 DropListener

java - 如何用java编写中值滤波器?

c - 接收字符串时出现截断错误

java - 如何在Java中将字符串散列为具有范围的整数

java - 使用 ReSTLet 和 GAE 过滤 ROOT 路径

python - 正则表达式初学者 : how to remove comma before a keyword?

python - 如何使用 Python 替换本文中的冒号?

c# - 年间隔的正则表达式