PHP中如何匹配单独一行的指定字符串(以robots.txt为例)
精准匹配robots.txt中单独一行的“Disallow: /”(允许末尾带空格)
你当前用strpos直接查找字符串的方式,会误匹配包含“Disallow: /”片段的其他行(比如Disallow: /c/portal/)。要实现只匹配单独一行、内容为“Disallow: /”且末尾可带任意空格的需求,用正则表达式做整行匹配是更合适的方案。
修改后的代码
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // 注意:原URL中的空格是笔误,已修正为标准格式 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://domain.com/robots.txt"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $handle = curl_exec($ch); curl_close($ch); // 使用正则表达式实现精准整行匹配 $pattern = '/^Disallow: \/\s*$/m'; if (preg_match($pattern, $handle)) { echo "Found"; } else { echo "Not Found"; }
正则表达式说明
^Disallow: \/:匹配行开头的“Disallow: /”(其中/需要转义为\/,避免和正则的分隔符冲突)\s*:匹配末尾任意数量的空白字符(包括空格、制表符)$:匹配行的结尾m:启用多行模式,让^和$作用于每一行的首尾,而不是整个文本块的首尾
测试示例robots.txt
User-agent: * Disallow: / << 会被正确匹配 Disallow: /c/portal/. << 不会被误匹配 Disallow: /wp-admin/ Disallow: /*/wp-admin/
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

