在JMeter中使用正则表达式从HTML响应提取指定值求助
问题描述
我尝试从转义后的HTML响应中提取选中状态<option>标签的value值(即示例中的2),但用现有正则表达式时,会捕获从“Select Region”到目标引号的全部内容,求正确的正则表达式。
现有正则表达式:
Select Region</option>.*<option selected="selected" value="(.+?)"
转义后的HTML响应内容:
<div class="col-lg-3 col-md-4 col-sm-12 form-group "> <label> Region</label> <select class="Grid="0" id="RegionId" name="RegionId"><option value="">Select Region</option> <option value="9">IDX-ACO REGION CA</option> <option value="1">IDX-REGION I</option> <option selected="selected" value="2">IDX-REGION II</option> <option value="3">IDX-REGION III</option> <option value="5">IDX-REGION IV</option> </select> </div>
解决方案
问题根源
你用的正则里,.*是贪婪匹配模式,默认还不匹配换行符,导致它会尽可能多的抓取内容,范围远超预期。而且没必要依赖前面的“Select Region”内容,直接定位选中的<option>标签更精准。
正确正则表达式
如果value值只有数字,用这个:
<option selected="selected" value="(\d+)"
如果value可能包含字母、符号等非数字字符,换成:
<option selected="selected" value="([^"]+)"
解释
(\d+):精准匹配一个或多个数字,刚好对应示例里的2;[^"]+:匹配到下一个转义引号"为止,避免贪婪匹配,能准确捕获任意类型的value值;- 直接定位带
selected="selected"的选项,完全避开无关内容的干扰,不会出现过度捕获的问题。
内容的提问来源于stack exchange,提问作者Siva
相关产品推荐
相关产品推荐

