Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从字符串中获取特殊值(正则表达式)_Php_Regex - Fatal编程技术网

Php 从字符串中获取特殊值(正则表达式)

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

玩regex对我来说是件很难的事

我试图从这个字符串中获取“值”149150

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