【问题标题】:Is it possible to split the file contents using a custom pattern?是否可以使用自定义模式拆分文件内容?
【发布时间】:2010-10-21 04:42:45
【问题描述】:

是否可以将文件内容拆分为具有特定模式的部分?

这就是我想要实现的目标:

  • 使用 file_get_contents 读取文件
  • 只读类似评论区域之间的内容。

我不确定这有多复杂,但基本上如果我正在解析一个大的 html 文件并且只想向浏览器显示特定的小部件(模式是注释边界),如下所示:

示例:

<html>
<head>
   <title>test</title>
</head>
<body>
 this content should not be parsed.. ignored
 <!-- widget -->
 this is the widget. i want to parse this content only from the file
 <!-- widget -->
</body>
</html>

是否可以使用 php 和 regex 或任何东西来解析边界之间的内容?

我很抱歉,但我试图尽可能多地解释我想要实现的目标。希望有人帮助我。

【问题讨论】:

    标签: php regex parsing file-get-contents


    【解决方案1】:

    这当然是可能的,但实际上并不需要使用正则表达式来完成。我可能会做这样的事情:

    $file = file_get_contents('http://example.com/');
    $widgets = explode('<!-- widget -->', $file);
    

    现在$widget[1], [3], [5] 等)的奇数元素包含了这些边界之间的内容。

    【讨论】:

      【解决方案2】:

      你可以用一个正则表达式来实现你想要的(或者如果你只是分裂你可能只是使用它)。检查文档。使用explode() 的另一个答案可能也可以。

      $text = file_get_contents('/path/to/your/file');
      $array = split('<!-- widget -->', $text);
      

      第一个条目将是第一次出现 &lt;!-- widget --&gt; 之前的所有内容,最后一个元素将是最后一个 &lt;!-- widget --&gt; 之后的所有内容。每个奇数元素都是您要寻找的。​​p>

      Php split function documentation

      【讨论】:

      • 非常非常好。快速提问..explode 和 split 之间有什么实际区别吗?
      • 并非如此,除了 split() 支持正则表达式,而 explode 不支持。老实说,如果你不打算使用正则表达式,你可能应该使用 explode() 因为它可能更快(与 php 核心加载正则表达式相关的东西以进行拆分但不爆炸有关)。
      • 好的,谢谢你的解释。是的,我会尽量避免正则表达式,因为它可以爆炸,不需要让事情变得复杂。
      【解决方案3】:
      $pattern = "/<!-- widget -->([\s\S]+)<!-- widget -->/";
      $match = preg_match_all($pattern,$string,$match_array);
      
      var_dump($match_array);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        相关资源
        最近更新 更多