繁体   English   中英

PHP正则表达式第二次出现

[英]PHP regex second occurrence

我有一些类似下面的代码,并且我使用正则表达式提取某些内容:

内容

[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_divider[^\]]*\]([^\[]*)\[/vc_#Us"

应该解决您的问题,同时尽可能少地更改正则表达式。 与您的尺寸一样,价格将在捕获组1中。

正则表达式的问题是.*试图尽可能匹配。

我正在使用[^\\]]*[^\\]]*替换两个.* 这些说匹配0到许多( *不属于)字符][\\]\\[ )。

工作实例

稍作改进的版本将是:

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

这样做完全一样,但是价格周围的空白(换行符)将被排除在匹配之外。

您应该可以使用\\[dt_divider style="thin"\\/\\]\\s*£([\\d\\.]+)捕获它

比赛群组: [121-123]

70

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

在此处查看演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM