Regex 使用ApacheJMeter的正则表达式

Regex 使用ApacheJMeter的正则表达式,regex,apache,jmeter,Regex,Apache,Jmeter,我正在使用ApacheJMeter的“正则表达式提取器”,并试图从如下XML文件中提取一些参数:- http://search.spotxchange.com/vast/2.00/101458?VPAID=1&cb=1421845139 我正在从该标记提取视频文件的参数,如(高度、宽度、类型):- <MediaFile delivery="progressive" apiFramework="VPAID" bitrate="0" height="360" width="480"

我正在使用ApacheJMeter的“正则表达式提取器”,并试图从如下XML文件中提取一些参数:-

http://search.spotxchange.com/vast/2.00/101458?VPAID=1&cb=1421845139
我正在从该标记提取视频文件的参数,如(高度、宽度、类型):-

<MediaFile delivery="progressive" apiFramework="VPAID" bitrate="0" height="360" width="480" type="application/x-shockwave-flash">

我使用这个正则表达式来提取这些参数:-

<MediaFile delivery="(.+?)" type="(.+?)" bitrate="(.+?)" height="(.+?)" width="(.+?)"> 

主要问题在于这些标记参数没有按特定顺序显示,因此,例如,有时(width=“”)出现在媒体文件参数的开头,有时是最后一个,如前一个示例所示


那么,如何编写一个高效的正则表达式提取器来提取这些参数呢

假设您不介意在<和>之间匹配整个属性列表,您可以尝试以下方法:

<MediaFile(\s\w+=\"[^"]+\")+>

<MediaFile # match '<MediaFile' exactly
(          # start of capturing group
\s         # exactly one space
\w+=       # one or more letters followed immediately by an equals
\"         # escaped(starting) quote mark
[^"]+      # match anything EXCEPT double-quote once or more times
\"         # escaped (end) quote
)+         # close capturing group and expect that group once or more times
>          # match >
#匹配>
使用分组“()”,以便中的整个表达式可以在末尾添加+以用于多个属性。但是,它不一定是一个捕获组。它实际上应该是一个非捕获组(“(?:regex here)”),但这看起来有点混乱,而且在本例中似乎没有太大关系。

JMeter提供了专为从XML/XHTML响应中获取值而设计的。也就是说,对于接收
MediaFile
标记的
width
属性,可以使用以下XPath表达式:

//MediaFile/@width
要获取
交付
属性:

//MediaFile/@delivery
等等

有关XPath提取器和XPath语言的更多信息,请参阅以下参考资料:


使用真正的xml解析器而不是正则表达式,特别是如果格式不固定,您必须尝试使用OR正则表达式,这将变成一场噩梦。IMHO正则表达式可以提取单个属性或对一个参数进行批量更改,但不能解析html或xml结构。