java - 使用 java.lang.String.matches() 查找匹配项

标签 java regex

我有一个包含换行符的字符串 say...

str = "Hello\n"+"Batman,\n"+ "Joker\n"+ "here\n"

我想知道如何使用 java.lang.String.matches 在字符串 str 中找到特定单词 say .. Joker 的存在()

我发现 str.matches(".*Joker.*") 返回 false 并返回 true 如果我删除新行人物。那么用作 str.matches() 参数的正则表达式是什么?

一种方法是... str.replaceAll("\\n","").matches(.*Joker.*);

最佳答案

问题是 .* 中的点默认不匹配换行符。如果你想匹配换行符,你的正则表达式必须有标志 Pattern.DOTALL .

如果您想将其嵌入到 .matches() 中使用的正则表达式中,则正则表达式为:

"(?s).*Joker.*"

但是,请注意,这也将匹配 Jokers。正则表达式没有单词的概念。因此,您的正则表达式真的需要是:

"(?s).*\\bJoker\\b.*"

然而,正则表达式不需要匹配所有它的输入文本(这是 .matches() 所做的,违反直觉),只匹配需要的。因此,这个解决方案更好,并且不需要Pattern.DOTALL:

Pattern p = Pattern.compile("\\bJoker\\b"); // \b is the word anchor

p.matcher(str).find(); // returns true

关于java - 使用 java.lang.String.matches() 查找匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17587718/

相关文章:

python - 对于格式错误的 python 代码,sed 中的 camelCase 到 snake_case

regex - 使用 insertafter 的 Ansible lineinfile 复制

PHP 正则表达式忽略以双下划线开头的文件

java - 在Java数组列表中连接字符串

java - 如何在 Intellij Idea 中查看 maven 检查样式插件报告?

带有正则表达式的 Java String.split()

python - 从字符串列表中计算最接近的字符串匹配

java正则表达式不以点结尾的单词

java - 泛型和 "where"子句

python - 正则表达式捕获除了一个词以外的所有内容(打破一个词而不是字符)