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

时间:2017-07-10 06:11:52

标签: java regex

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

例如:

  

testest = false opResult =不支持临界扩展随机= abc srcPort = 10

所以我应该在下一个带有等号的单词之前提取Critical extension not supported

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

  

typesOnly = false opResult =不支持关键扩展

正则表达式我目前在最后一个' ='之前提取了所有内容。登录。

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

3 个答案:

答案 0 :(得分:1)

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

.*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));
}

<强>输出:

Critical extension not supported

在这里演示:

Rextester

答案 1 :(得分:0)

你应该使用积极的lookbehind和积极的前瞻以及中间文本的懒惰量词

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

您可以在regex101上看到结果。

答案 2 :(得分:0)

我们需要在&lt; opResult =&#39;之后找到文字。在下一个空格(\ s)字(\ w +)之前跟一个等号(?==)以及后面的任何内容(。*)

模式变为

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

这是指向Regex101

的链接