我正在使用regex捕捉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变量。
问题是,有时只有mp4源存在;有时两者都存在。按照wordpress喜欢的顺序,其他信息,比如autoplay或poster,可能存在也可能不在那里。
因此,我需要一个条件regex,它考虑到这一点,如果没有webm,就不会失败。
最初我有这样一个:
\[video .* mp4="(.*?)".*webm="(.*?)"\]\[/video\]它可以很好地与mp4和webm一起使用一个短代码(信任wordpress似乎是出于某种原因,总是把webm放在最后),但是当webm不存在时就会失败。
现在我正在尝试条件正则表达式,但没有取得很大的成功。
我现在拥有的是:
\[video .* mp4="(.*?)".*(?(?=.*webm=)webm="(.*?)"\]\[/video\]|.*\]\[/video\])上面的mp4值在上面给出的两个示例中都能很好地捕捉到:但是如果存在webm,它就会忽略它。
我担心,即使我能够检索到这两个变量,短代码中信息的其他变体也会使我的正则表达式失去作用。
你能帮我创造一个更好的,更好的,防伪的吗?
发布于 2016-02-13 14:36:48
使用这个正则表达式:
\[video(?:.*?(?:webm|mp4)="([^"]*)")?(?:.*?(?:webm|mp4)="([^"]*)")?.*\]\[\/video\]https://stackoverflow.com/questions/35381022
复制相似问题