我有一个像这样的字符串:
“嘿,我是 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) 中找不到匹配项
我假设您的字符串中某处有一个换行符要匹配,例如:
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)
但我不能确切地告诉你为什么。
| 归档时间: |
|
| 查看次数: |
2308 次 |
| 最近记录: |