PHP在多个HTML行上搜索字符串

时间:2014-09-28 09:09:04

标签: php

我正在使用下面的PHP代码访问外部HTML文件,一旦访问,就会有一个foreach循环搜索HTML以查找存在于其他两个字符串之间的特定字符串。

当两个搜索字符串($ start_limiter和$ end_limiter)位于HTML文件的同一行时,此搜索工作正常。但是,当它们分开时,它不起作用。

我需要能够在两个搜索字符串之间获取字符串,而不管它们在哪一行。

<?php

function findText($start_limiter,$end_limiter,$url)
{
   $start_pos = strpos($url,$start_limiter);
   if ($start_pos === FALSE)
   {
       return FALSE;
   }

   $end_pos = strpos($url,$end_limiter,$start_pos);

   if ($end_pos === FALSE)
   {
      return FALSE;
   }

   return substr($url, $start_pos+1, ($end_pos-1)-$start_pos);
}  


$url = file("testResults.html");

$start_limiter = "firstString";
$end_limiter = "lastString";



foreach ($url as $number => $line)
{
    $res = findText($start_limiter, $end_limiter,trim($line));



    if ($res != FALSE)
    {

        $str2 = substr($res, 9);


    echo $str2;
        ?><br /><?php

}


}

2 个答案:

答案 0 :(得分:1)

在这种情况下,分析整个字符串而不是处理部分数据(逐行)会更好。

只需使用file_get_contents(),而不是file()(逐行读入数组),将整个页面读入单个字符串并删除当时多余的foreach循环。

答案 1 :(得分:0)

您可以使用file()

代替file_get_content()功能

file_get_contents - 将整个文件读入字符串

文件 - 将整个文件读入数组

<?php
$url = file_get_contents("testResults.html");

function findText($start_limiter,$end_limiter,$url)
{
   $start_pos = strpos($url,$start_limiter);
   if ($start_pos === FALSE)
   {
       return FALSE;
   }

   $end_pos = strpos($url,$end_limiter,$start_pos);

   if ($end_pos === FALSE)
   {
      return FALSE;
   }

   return substr($url, $start_pos+1, ($end_pos-1)-$start_pos);
}  

$start_limiter = "firstString";
$end_limiter = "lastString";
$res = findText($start_limiter, $end_limiter,trim($line));