PHP中preg_match匹配file_get_contents读取内容返回空数组如何解决
问题原因
PHP的PCRE正则引擎默认配置下,元字符.仅匹配除换行符\n之外的所有字符。你读取的多行文件内容中,两个#a#标记之间包含换行,.*?无法跨换行匹配内容,导致整个正则匹配失败,返回的结果数组为空。
解决方案
有两种常用的修复方式:
- 方案1:给正则添加
s模式修正符,该修饰符的作用就是让.可以匹配包括换行符在内的所有字符,修改后的完整代码如下:
<?php $HTML = file_get_contents('file.php'); $REGEX = '/#a#(.*?)#a#/s'; // 正则末尾加s修饰符 preg_match($REGEX, $HTML, $MATCH); print_r($MATCH); var_dump($MATCH); ?>
- 方案2:不依赖修饰符,将通配符
.*?替换为[\s\S]*?,其中\s匹配所有空白字符(含换行、制表符等),\S匹配所有非空白字符,二者组合即可覆盖所有字符场景,修改后的正则如下:
$REGEX = '/#a#([\s\S]*?)#a#/';
内容的提问来源于stack exchange,提问作者ReflectYourCharacter
相关产品推荐
相关产品推荐

