Php 从字符串中获取特殊值(正则表达式)
玩regex对我来说是件很难的事 我试图从这个字符串中获取“值”149和150:Php 从字符串中获取特殊值(正则表达式),php,regex,Php,Regex,玩regex对我来说是件很难的事 我试图从这个字符串中获取“值”149和150: a:1:{s:7:"sliders";a:1:{s:10:"fullscreen";a:5:{s:6:"slides";a:2:{i:47;a:4:{s:9:"attach_id";s:3:"149";s:10:"slide_type";s:5:"image";s:5:"title";a:2:{s:5:"value";s:0:"";s:5:"color";s:0:"";}s:7:"caption";a:2:{s:5
a:1:{s:7:"sliders";a:1:{s:10:"fullscreen";a:5:{s:6:"slides";a:2:{i:47;a:4:{s:9:"attach_id";s:3:"149";s:10:"slide_type";s:5:"image";s:5:"title";a:2:{s:5:"value";s:0:"";s:5:"color";s:0:"";}s:7:"caption";a:2:{s:5:"value";s:0:"";s:5:"color";s:0:"";}}i:48;a:4:{s:9:"attach_id";s:3:"150";s:10:"slide_type";s:5:"image";s:5:"title";a:2:{s:5:"value";s:0:"";s:5:"color";s:0:"";}s:7:"caption";a:2:{s:5:"value";s:0:"";s:5:"color";s:0:"";}}}s:9:"fit_style";s:7:"default";s:8:"controls";s:7:"default";s:6:"thumbs";s:3:"yes";s:8:"autoplay";s:7:"default";}}}
我尝试了这个,但没有任何好结果:
/^.*_id";s:3:"(.*)";.*$/
如果是序列化字符串,请使用unserialize
Ref:如果您坚持使用正则表达式,则需要在量词中添加“?”,这样您就不会匹配组中的整个字符串:
/^.*_id";s:3:"(.*?)";.*$/
然而,这将只映射一个值。要映射所有这些对象,请使用:
_id";s:3:"(.*?)";
您应该使用解析器。对于正则表达式,您只需
(?<=;s:3:")\d+
(?您可以执行以下操作:
$arr = unserialize($input);
foreach ($arr['sliders']['fullscreen']['slides'] as $a) { echo $a['attach_id']. "\n"; }
149
150
这是一个PHP序列化字符串,可以使用
但是,如果出于某种原因确实需要使用正则表达式:
您正在使用的正则表达式匹配第一个值,然后匹配字符串的整个剩余部分。*
是贪婪的。相反,您希望它是懒惰的,因此您可以在*
后面添加一个问号,如下所示:/^.\u id;s:3:(.*);.$/
其次,因为您使用的是定位点^
和$
,所以它将只匹配一个匹配项。请删除定位点,或复制模式:
/\u id“s:3:(.*)”/
/^.*\u-id“s:3:(.*);.*\u-id”s:3:(.*);.$/
您可以在此处了解有关懒惰与贪婪的更多信息:
我的建议是使用定义的匹配,而不是*
:
/\u id“s:3:(\d*)”;/
只要它是一个数字,这将使你的表达更加具体和清晰,让其他人阅读
这是测试正则表达式的好地方:使用合适的解析器,…谢谢!我就是这样做的!
$arr = unserialize($input);
foreach ($arr['sliders']['fullscreen']['slides'] as $a) { echo $a['attach_id']. "\n"; }
149
150