正则表达式捕获视频wordpress短代码

时间:2016-02-13 14:19:21

标签: regex wordpress video shortcode

我正在使用正则表达式来捕获wordpress中[video]短代码中的变量。

想象一下不同的短代码。一个人可能看起来像这样:

[video width="1080" height="1920" mp4="http://path-to-video/20160119_144218.mp4" autoplay="true" webm="http://path-to-video/20160119_144218_1.webm"][/video]
另一个,像这样:

[video width="720" height="1280" mp4="http://path-to-video/VID_20160118_134920.mp4" autoplay="true" poster="http://path-to-image/2016-01-23-16_23_45-Export-Settings-1.jpg"][/video]

我的正则表达式的目的是检索mp4webm变量。

CATCH有时只会出现mp4来源;有时两者都存在。 其他信息,例如autoplayposter 可能会或可能不会,按照wordpress喜欢的顺序。

所以我需要一个条件正则表达式,考虑到这一点,如果没有webm,则不会失败。

最初我有这个:

\[video .* mp4="(.*?)".*webm="(.*?)"\]\[/video\]

mp4webm的短代码完美配合(信任wordpress会因为某些原因似乎总是将webm放在最后),但在webm没有出现。

现在我正在尝试使用条件正则表达式,但没有取得很大的成功。

这就是我所拥有的:

\[video .* mp4="(.*?)".*(?(?=.*webm=)webm="(.*?)"\]\[/video\]|.*\]\[/video\])

以上两个示例中的mp4值都很好:但是在webm出现的地方,它会忽略它。

我担心,即使我设法检索这两个变量,短代码中信息的其他变体也可能会使我的正则表达式失效。

你能帮助我创造一个更好的,傻瓜式的正则表达式吗?

1 个答案:

答案 0 :(得分:1)

使用此正则表达式:

\[video(?:.*?(?:webm|mp4)="([^"]*)")?(?:.*?(?:webm|mp4)="([^"]*)")?.*\]\[\/video\]

工作示例:https://regex101.com/r/tC1aE3/5