在HTML中查找字符串并在之后获得值

问题描述 投票:-2回答:2

我正在发布到网页上,在响应中,我得到了很大一部分HTML,这些HTML会更改下一个请求。使用groovy我想找到这个字符串:

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

下一次我发布到网页时,值“ 23”将更改,我需要该值。

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

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

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

java html regex groovy soapui
2个回答
0
投票

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

我从没使用过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的数字,则必须编写稍微复杂一些的正则表达式,其内容应为“ 100000或5位数字”。


0
投票

如果我理解您正确匹配的字符串,这将帮助您以纯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'
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.