java - 如何使用java的模式匹配器匹配包含多行的字符串中的单词

标签 java regex pattern-matching

我有一个包含多行的字符串,我想在该多行中找到特定的模式,例如

String s = "foo\r\nbar\r\nfoo"
                + "foo, bar\r\nak  + "
                + "foo, bar\r\nak  + "
                + "bar, bar\r\nak  + "
                + "blr05\r\nsdfsdkfhsklfh";

上面的字符串是一个多行字符串,我想在其中找到“ak”并获取它在 + 之后的下一个单词,在我的示例中是 foo,bar,blr05

为此,我创建了模式 Pattern.compile("^ak\\s*+\\s*(\\w+)") 但它在 matcher.find( ) 本身返回 false。

最佳答案

默认情况下,正则表达式仅匹配单行内的文本。有两种修改方法。因此,适合您的一种解决方案是编写

Pattern.compile("^ak\\s*+\\s*(\\w+)", Pattern.MULTILINE);

添加额外参数将为您提供一个可跨多行匹配的Pattern

更新
正如 sln 所指出的,您原来的正则表达式没有多大意义,因为 * 后面有 + 。您的意思可能是 "^ak\\s*\\+\\s*(\\w+)" - 也就是说,转义 + 使其成为文字。

关于java - 如何使用java的模式匹配器匹配包含多行的字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44340023/

相关文章:

php - 使用 PHP 从字符串中删除 html 元素

java - 多行 REGEX - 仅匹配第一行,忽略其余行

haskell - 有没有办法对列表中间的值进行模式匹配?还是在最后?

java - spring-boot 更新到 1.3.1 后 webapp 无法启动

regex - typescript 无法解析正则表达式中的命名组

javascript - 如果长度为空,则需要通过一个条件

scala - 利用 Scala 匹配表达式中案例类的类型约束

java - 从给定字符串中获取所有可能的回文

java - 在 Java 中打印 Map<String,List<Bean>> 的内容

java - CardLayout - 不会切换回第一个面板