正则表达式在Regexr中可用但PHP preg_match返回空值求助
问题解决:PHP preg_match匹配失败原因及修复
问题分析
你的正则表达式在regexr.com能正常匹配,但PHP中preg_match返回空,核心原因是待匹配文本包含换行符——PHP的preg_match默认情况下,正则里的.(点号)不会匹配换行符,而regexr通常默认开启了「DOTALL」模式(让点号匹配所有字符包括换行)。
修复方案
有两种可行的修复方式:
方式1:添加s修饰符
在正则表达式末尾加上s,开启DOTALL模式,让.匹配包括换行在内的所有字符:
preg_match('/Donor Comment:\*(.*?)\*/s', $msg, $donor_comment);
方式2:替换为[\s\S]*?
用[\s\S](匹配所有空白和非空白字符,即所有字符)代替.,无需额外修饰符:
preg_match('/Donor Comment:\*([\s\S]*?)\*/', $msg, $donor_comment);
验证说明
修复后,PHP的preg_match就能正确捕获跨多行的捐赠评论内容,和regexr上的匹配结果一致。
内容的提问来源于stack exchange,提问作者Enjabain
相关产品推荐
相关产品推荐

