PHP正则表达式第二次出现

PHP正则表达式第二次出现,php,regex,Php,Regex,我有一些代码,如下所示,我正在使用正则表达式提取某些内容: 内容 [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, $ma

我有一些代码,如下所示,我正在使用正则表达式提取某些内容:

内容

[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”/
,从而只拾取第二个


希望这是有意义的:-)

您应该能够使用
\[dt\u divider style=“thin”\/\]\s*([\d\.]+)

匹配组: [121-123]

70

"#\[dt_divider[^\]]*\]([^\[]*)\[/vc_#Us"
应该在尽可能少地更改正则表达式的同时解决您的问题。与您的尺码一样,价格将在捕获组1中

正则表达式的问题是,
*
试图尽可能多地匹配

我正在使用
[^\]*
[^\]*
替换这两个
*
。它们表示将0与许多(
*
)字符相匹配,这些字符不是
]
[
\]
\[

稍微改进的版本是:

"#\[dt_divider[^\]]*\]\s*([^\[]*?)\s*\[/vc_#Us"
这是完全相同的,但是价格周围的任何空格(换行符)都将被排除在匹配之外

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

请参阅演示

@user1857612很高兴提供帮助