2016-02-13 50 views
0

我使用正則表達式來捕獲wordpress中[video]短代碼內的變量。正則表達式來捕捉視頻wordpress短代碼中的變量

想象一下不同的簡碼。一個看起來是這樣的:

[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

嘗試['\ [視頻\ B [^]] * \ SMP4 = 「([^」] *)「(?: (?!\ swebm =)[^]])*(?:\ swebm = 「([^」] *)「)[^]] *] \ [\ /視頻]'](HTTPS:// regex101的.com/R/pG8aR8/1)。 –

+0

當WP已經爲你做了這件事時,你爲什麼會嘗試自己解析一個簡碼? https://codex.wordpress.org/Shortcode_API#Handling_Attributes – CBroe

+0

@Wiktor:哇...我有這麼多的問題...這似乎工作,謝謝:))) – nico

回答

1

使用此正則表達式:

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

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

+0

我看到這會更好,但是在這種例子中,對於我而言,「poster」屬性會失敗:'[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]' – nico

+1

是吧作品。謝啦 – nico