PHP中如何用正则表达式提取多行字符串中的指定片段?
解决PHP正则提取多行字符串内容无结果的问题
你的正则没生效主要有两个原因:
- 默认情况下,正则里的
.不会匹配换行符,而目标内容和response:不在同一行,导致匹配失败 - 正则的结束边界写得不对,原正则
)};和实际字符串结构不匹配,目标内容结尾是}],后面才是};
修改后的代码如下:
$input = '<script> buffy = 1; vampire = { response: [{"sleep":"night"}] }; </script>'; // 加上s修饰符让.匹配换行,同时调整结束匹配的边界 preg_match( '~response:\s*(.*?)\s*};~s', $input, $output ); print_r( $output );
正则说明
s:开启单行模式,让.匹配包括换行在内的所有字符\s*:匹配任意数量的空白字符(包括空格、换行),兼容代码里的换行和缩进(.*?):非贪婪匹配任意字符,直到遇到后面的};,精准捕获目标内容
执行后$output[1]就是你想要提取的[{"sleep":"night"}]。
内容的提问来源于stack exchange,提问作者Kermit
相关产品推荐
相关产品推荐

