【问题标题】:PHP preg_match with file_get_contents empty array matchPHP preg_match 与 file_get_contents 空数组匹配
【发布时间】:2022-01-09 17:00:07
【问题描述】:

我尝试使用 preg_match

提取数据
<?php
$HTML   = '#a#TEXT#a#';
$REGEX  = '/#a#(.*?)#a#/';

preg_match($REGEX, $HTML, $MATCH);

print_r($MATCH);
var_dump($MATCH);
?>

这很好用。 但是,如果我使用 file_get_contents

从文件中尝试相同的操作

这是输入文件file.php: #a#TEXT#a#

<?php

$HTML   = file_get_contents("file.php");
$REGEX  = '/#a#(.*?)#a#/';

preg_match($REGEX, $HTML, $MATCH);

print_r($MATCH);
var_dump($MATCH);
?>

数组 $MATCH 为空我的错误在哪里?

如果文件是这样的: #a#TEXT#a# 行得通!

但是如果文件在多行中(带有中断)::

#a#

TEXT

#a#

它不起作用。我该如何解决?

【问题讨论】:

    标签: php preg-match file-get-contents


    【解决方案1】:

    您确定文件被正确读取了吗? 试试 var_dump($HTML);加载文件后。如果为 False,则无法读取文件

    【讨论】:

    • 使用 echo 和 var_dump 我得到了内容,但没有使用 preg_match。
    • 这是读取后的 var_dump() 输出。字符串(13)“#a#TEXT#a#”
    • @z4o 你确实意识到#a#TEXT#a# 是十个字符,并且调试输出显示string(13),是吗?显然,价值中包含更多的东西,你看不到。 (可能是 BOM,因此请确保将 file.php 保存为没有 BOM 的 UTF-8。)
    【解决方案2】:

    这是帮助我匹配多行任何字符的正则表达式:

    $REGEX = '/#a#(.*?)#a#/s';
    

    我在我的正则表达式上放了一个 s,它可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 2013-05-27
      相关资源
      最近更新 更多