我正在尝试匹配以下视频网址:
<iframe width="420" height="315" src="//www.youtube.com/embed/F40ZBDAG8-o?rel=0" frameborder="0" allowfullscreen></iframe>
我有以下内容:
^<iframe
(\swidth="\d{1,3}")?
(\sheight="\d{1,3}")?
(\salt=""[^""<>]*"")?
(\stitle=""[^""<>]*"")?
\ssrc="//(www.youtube.com|player.vimeo.com)/[-a-z0-9+&@#/%?=~_|!:,.;\(\)]+"
(\sframeborder="[^""<>]*")?
(\sallowfullscreen)?
\s?/?></iframe>$
这是有效的,但我不能依赖于youtube将始终提供遵循此结构的嵌入链接这一事实。如果他们将width
属性移至src
之后,我的正则表达式将失败。
有没有办法进行与订单无关的分组,以解决这个问题?
答案 0 :(得分:1)
您可以使每个搜索字词都是前瞻性的 - 这些字符串不会占用字符串,因此它们可以按任何顺序排列。例如:
<iframe (?=.*height="\d{1,3}")(?=.*width="\d{1,3}").*
将匹配
<iframe width="123" height="321"
和
<iframe height="321" width="123"
我相信你可以自己完成(添加你想要匹配的所有术语)。
注意 - 这个“匹配” - 它不“提取”。但是它会告诉你所有这些术语都以任何顺序存在于表达式中。
编辑自从我开始撰写此答案后,出现了一些评论,这些评论会改变我对您的请求的理解。如果你“只是”想要提取src=
的东西,你只需要
<iframe.*?src="([^"]+)"
和匹配(括号中的东西)将是第一个和第二个双引号之间的任何内容。通常,有比regex更好的工具来解析HTML - 我的个人偏好是BeautifulSoup(Python)。