是否可以使用一个正则表达式解决此问题。 这是输入字符串的3个版本:
<iframe height="100px" width="200px" src="https://stackoverflow.com">
<iframe src="https://stackoverflow.com" width="200px" height="100px">
<iframe width="200px" height="100px" src="https://stackoverflow.com">
我需要将结果作为3个匹配组(始终按此顺序)
https://stackoverflow.com
100px
200px
或者我需要拳头做<iframe(.*?)>
,然后每个匹配src,width,height?
答案 0 :(得分:1)
单正则表达式,假设从来没有任何其他属性,换行符,注释,=
周围的空格,不带引号的属性值等(使用HTML解析器!):
<iframe\s+(?:height="([^"]*)"|width="([^"]*)"|src="([^"]*)")\s+(?:height="([^"]*)"|width="([^"]*)"|src="([^"]*)")\s+(?:height="([^"]*)"|width="([^"]*)"|src="([^"]*)")\s*>
获得:
src
,使用第3,第6和第9个捕获组的串联height
,使用第1,第4和第7个捕获组的串联width
,使用第2,第5和第8个捕获组的串联正则表达式简单地由三个重复的交替组成,可以匹配三个属性中的任何一个并在组中捕获其值。该交替的每次重复定义了三个捕获组,每个匹配中只有一个被评估。