在 Html 中查找一个字符串并获取之后的值

Find a string in Html and get value after

我正在 post 访问一个网页,在我的回复中我得到了一大块 HTML 将更改下一个请求。 使用 groovy 我想找到这个字符串:

var WPQ1FormCtx = {"ListData":{"owshiddenversion":23,

下次我 post 到网页时值“23”会改变,我需要那个值。

使用 .contains 我将查找字符串是否存在。

def htmlParse = Jsoup.parse(htmlResponse)
log.info a.contains('var WPQ1FormCtx = {"ListData":{"owshiddenversion":23,') 

但是我需要在字符串'var WPQ1FormCtx = {"ListData":{"owshiddenversion":xxxxx,中写出owshiddenversion后面的值 可以是 1 到 100 000 之间的任何值。

(希望我不会吸引太多反对票...)

我从来没有用过 Java,但是玩 here 我可以想出一个使用正则表达式的例子:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HelloWorld{
     public static void main(String []args){
        String str = new String("before the number 234123");
        Pattern pattern = Pattern.compile("before the number (\d{1,6})");
        Matcher matcher = pattern.matcher(str);
        matcher.matches();
        System.out.println(matcher.group(1));
     }
}

如果你真的让这个数字小于或等于 100000,那么你必须编写一个稍微复杂的正则表达式,它应该是 "either 100000 or a 5 digit number".

如果我正确理解了您正在匹配的字符串,这将帮助您以纯 Groovy 的方式进行匹配。您可以将它包装在一个称为测试而不是 .contains()

的方法中
def stringPortion = 'var WPQ1FormCtx = {"ListData":{"owshiddenversion":23,'

def match = stringPortion =~ /"owshiddenversion":(\d{1,6})/  //capture the match with ()

def matchPortion = match[0][1] //first capture in match

if (matchPortion) {
    println matchPortion
    def number = matchPortion.toInteger()
    if (number > 100000) {
        println 'number > 100000'
    }
    else if (number <= 10000) {
        println 'number <= 10000'
    }
}

下面的代码块可以工作

def json = WPQ1FormCtx 
def parsedJson = new groovy.json.JsonSlurper().parseText(json)
def owshiddenversion= parsedJson.findIndexOf { it.key == 'owshiddenversion' }