JMeter正则表达式提取器使用正向预查报错问题求助
JMeter正则提取器正向预查报错的解决方法
问题原因
JMeter的Regular Expression Extractor(正则表达式提取器) 默认使用Jakarta ORO正则库,这个库不支持正向预查(即(?<=)语法)。而查看结果树里的正则测试工具用的是Java原生正则引擎,Python也支持正向预查,所以才会出现两边能用但提取器报错的差异。
解决方法
方法1:修改正则表达式,改用捕获组(最简单)
去掉预查语法,直接用捕获组包裹要提取的内容,正则表达式改为:
lang="(.+?)"
然后在正则提取器里做如下设置:
- 引用名称:自定义变量名(比如
lang) - 正则表达式:填入上面的表达式
- 模板:
$1$(表示取第一个捕获组的内容) - 匹配数字:
1(取第一个匹配结果)
这样就能正常提取en-US了。
方法2:用JSR223 Extractor替代(适合复杂正则场景)
如果一定要保留原正则的预查语法,可以用JSR223 Extractor搭配Groovy脚本(Groovy支持Java原生正则引擎):
- 添加JSR223 Extractor到目标请求下
- 在脚本框中填入:
def response = prev.getResponseDataAsString() def matcher = response =~ /(?<=lang=")(.+?)(?=")/ if (matcher.find()) { vars.put("lang", matcher.group(1)) }
- 运行后,变量
lang就会存储提取到的en-US。
内容的提问来源于stack exchange,提问作者Kirill Kiselev
相关产品推荐
相关产品推荐

