我正在发布到网页上,在响应中,我得到了很大一部分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,但是在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位数字”。
如果我理解您正确匹配的字符串,这将帮助您以纯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'
}
}