正则表达式以任何顺序匹配

时间:2018-02-08 13:17:32

标签: regex

是否可以使用一个正则表达式解决此问题。 这是输入字符串的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?

1 个答案:

答案 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个捕获组的串联

正则表达式简单地由三个重复的交替组成,可以匹配三个属性中的任何一个并在组中捕获其值。该交替的每次重复定义了三个捕获组,每个匹配中只有一个被评估。

Example on regex101