如何使用Java正则表达式提取特定单词前后的字符串

如何使用Java正则表达式提取特定单词前后的字符串,java,regex,Java,Regex,我需要在opResult之后和另一个字符串单词+'='之前提取一个字符串 例如: testest=false opResult=Critical extension not supported random=abc srcPort=10 所以我应该在下一个带等号的单词之前,提取出不支持的临界扩展 另外,如果后面没有其他字符串,它也应该工作,这意味着我应该得到与下面示例相同的结果 typesOnly=false操作结果=不支持关键扩展 我当前提取了最后一个“=”符号之前的所有内容的正则表达式 op

我需要在opResult之后和另一个字符串单词+'='之前提取一个字符串

例如:

testest=false opResult=Critical extension not supported random=abc srcPort=10

所以我应该在下一个带等号的单词之前,提取出不支持的临界扩展

另外,如果后面没有其他字符串,它也应该工作,这意味着我应该得到与下面示例相同的结果

typesOnly=false操作结果=不支持关键扩展

我当前提取了最后一个“=”符号之前的所有内容的正则表达式

opResult=(\S.*)(\s\w+=)

您应该使用正向前瞻和正向前瞻,以及中间文本的惰性量词

(?<=opResult=).*?(?=\s*\S*=)

您可以在上看到结果。

我们可以尝试使用以下模式进行匹配/提取:

.*opResult=(.*?)(?:\\s*\\S+=.*|$)
这里的诀窍在于能够在下一个关键点开始时清晰表达,然后不提取它

String line = "testest=false opResult=Critical extension not supported random=abc srcPort=10";
String pattern = ".*opResult=(.*?)(?:\\s*\\S+=.*|$)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if (m.find( )) {
    System.out.println(m.group(1));
}
输出:

此处演示:


我们需要在“opResult=”之后的下一个空格\Swarm\w+后面跟一个等号?==以及后面的任何内容之前找到文本*

模式变成

.*opResult=([\w|\s]+)(\s\w+(?==).*)

这里是到

的链接,它仅在后面有字符串时有效,但如果后面没有字符串,它也应该有效。我刚刚更新了内容,介绍了opResult是字符串中最后一个键的情况。除此之外,我不知道你的意思。是的,这就是我想要的!非常感谢。它不应该抓取随机单词,只应该得到“不支持关键扩展”@Kaycee没有看到它,但给你。
.*opResult=([\w|\s]+)(\s\w+(?==).*)