我正在使用正则表达式来捕获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]
我的正则表达式的目的是检索mp4
和webm
变量。
CATCH有时只会出现mp4
来源;有时两者都存在。
其他信息,例如autoplay
或poster
可能会或可能不会,按照wordpress喜欢的顺序。
所以我需要一个条件正则表达式,考虑到这一点,如果没有webm,则不会失败。
最初我有这个:
\[video .* mp4="(.*?)".*webm="(.*?)"\]\[/video\]
与mp4
和webm
的短代码完美配合(信任wordpress会因为某些原因似乎总是将webm放在最后),但在webm
没有出现。
现在我正在尝试使用条件正则表达式,但没有取得很大的成功。
这就是我所拥有的:
\[video .* mp4="(.*?)".*(?(?=.*webm=)webm="(.*?)"\]\[/video\]|.*\]\[/video\])
以上两个示例中的mp4
值都很好:但是在webm出现的地方,它会忽略它。
我担心,即使我设法检索这两个变量,短代码中信息的其他变体也可能会使我的正则表达式失效。
你能帮助我创造一个更好的,傻瓜式的正则表达式吗?
答案 0 :(得分:1)
使用此正则表达式:
\[video(?:.*?(?:webm|mp4)="([^"]*)")?(?:.*?(?:webm|mp4)="([^"]*)")?.*\]\[\/video\]