在具有换行符的字符串中的两个单词之间提取

N D*_*ath 1 java regex

我有一个像这样的字符串:

“嘿,我是 Peter,我是一名软件工程师。我知道 Java,我是 RegEx 的新手”。

我想从“Peter to new”中提取所有字符。

从 gskinner.com/RegExr/ 我可以看到这种模式有效 - (?<=Hey)([^\n]*)(?=Reg)

但是在 Java 中,它不起作用。任何人都可以帮忙吗?在 Java 中需要做哪些不同的工作?

我的代码如下所示:

    Pattern p = Pattern.compile("(?<=Hey)([^\n]*)(?=Reg)");
    Matcher m = p.matcher(p);
    m.find();
    System.out.println(m.group(0));
Run Code Online (Sandbox Code Playgroud)

当我运行时,我收到一个异常,上面写着“找不到匹配项”。

线程“main”中的异常 java.lang.IllegalStateException:在 java.util.regex.Matcher.group(Matcher.java:485) 中找不到匹配项

dav*_*son 5

我假设您的字符串中某处有一个换行符要匹配,例如:

String stringWithPeter = "Hey I am Peter I work as a Software Engineer." +
    System.getProperty("line.separator") + "I know Java and I am new to RegEx";
Run Code Online (Sandbox Code Playgroud)

并且你想在这个换行符上匹配。您可以告诉 Java 在匹配点 (".") 时包含换行符:

Pattern p = Pattern.compile("(?<=Hey)(.*)(?=Reg)", Pattern.DOTALL);
Run Code Online (Sandbox Code Playgroud)

然后你会得到你正在寻找的行为。我还发现,当这有效时:

String stringWithPeter = "Hey I am Peter I work as a Software Engineer.\nI know Java and I am new to RegEx";
Pattern p = Pattern.compile("(?<=Hey)([^\r]*)(?=Reg)");
Run Code Online (Sandbox Code Playgroud)

但我不能确切地告诉你为什么。