2013-11-27 66 views
0

我有一個像下面一些代碼,我使用正則表達式來拉某些內容出:PHP正則表達式第二次數

內容

[vc_row][vc_column width="1/1"][vc_column_text] 
[dt_divider style="thin"/] 

size 18" x 18" 
[dt_divider style="thin"/] 

£70 
[/vc_column_text] 

我已經使用下列以獲得大小:

preg_match_all("#\[dt_divider.*\](.*)\[dt_#Us", $content, $matches3); 
$picsize = $matches3[1][0]; 

print $picsize; 

,然後試圖讓價格使用:

preg_match_all("#\[dt_divider.*\](.*)\[/vc_#Us", $content, $matches4); 
$price = $matches4[1][0]; 

print $picsize; 

上面的代碼只是陣列出來:

Array ([0] => Array ([0] => [dt_divider style="thin"/] size 18" x 18" [dt_divider style="thin"/] £70[/vc_) [1] => Array ([0] => size 18" x 18" [dt_divider style="thin"/] £70)) 

我如何得到它忽略第一個[dt_divider style="thin"/]所以它只是拿起第二?

希望是有道理:-)

回答

1
"#\[dt_divider[^\]]*\]([^\[]*)\[/vc_#Us" 

應該修正你的問題,同時改變你的正則表達式可能。與您的尺寸一樣,價格將在捕獲組1中。

您的正則表達式的問題在於.*嘗試儘可能地匹配它。

我使用[^\]]*[^\]]*來替換這兩個.*。這些說匹配0到很多(*)字符不是][\]\[)。

Working Example

稍微改進的版本應該是:

"#\[dt_divider[^\]]*\]\s*([^\[]*?)\s*\[/vc_#Us" 

這並不完全一樣,但任何空格(新行)左右的價格將會從比賽被排除。

+0

這工作出色!非常感激! – user1857612

+0

@ user1857612很高興爲您提供幫助 – OGHaza

0

你應該能夠\[dt_divider style="thin"\/\]\s*£([\d\.]+)

匹配組捕捉到它: [121-123]

70

0
preg_match_all("/^\[dt_divider style=\"thin\"\/\][\n\r]+\s*\K[^\n\r]+/m", $s, $m) 

觀看演示here

相關問題