使用php在两个字符串之间提取数据

使用php在两个字符串之间提取数据,php,Php,我想从上到下提取所有结果,我有这个脚本 function extract_unit($string, $start, $end) { $pos = stripos($string, $start); $str = substr($string, $pos); $str_two = substr($str, strlen($start)); $second_pos = stripos($str_two, $end); $str_three = substr($str_two, 0, $se

我想从上到下提取所有结果,我有这个脚本

function extract_unit($string, $start, $end)
{
$pos = stripos($string, $start);

$str = substr($string, $pos);

$str_two = substr($str, strlen($start));

$second_pos = stripos($str_two, $end);

$str_three = substr($str_two, 0, $second_pos);

$unit = trim($str_three); // remove whitespaces

return $unit;
}

$result = file_get_contents('html.txt');

echo extract_unit($result,'<dd class="m_operation_In">','</dd>');
echo extract_unit($result,'<span class="Unread">','</span>');
函数提取单元($string,$start,$end)
{
$pos=stripos($string,$start);
$str=substr($string,$pos);
$str_two=substr($str,strlen($start));
$second_pos=stripos($str_two,$end);
$str_三=substr($str_二,0,$second_位置);
$unit=trim($str_-three);//删除空白
返回$unit;
}
$result=file_get_contents('html.txt');
回波提取单元($result,,'');
回波提取单元($result,,'');

这个代码工作得很完美,但它只给了我第一个结果。我想要所有的结果。至少有7-8个结果需要一次性获取。我不知道现在该怎么办。任何形式的帮助都将不胜感激。谢谢

stripos
有第三个参数,您可以使用它获取以后出现的搜索字符串。您可以像这样循环所有匹配:

function extract_unit($string, $start, $end)
{

    $offset = 0;
    $units = array();
    while(($pos = stripos($string, $start) !== false) {
        $str = substr($string, $pos, $offset);
        $str_two = substr($str, strlen($start));
        $second_pos = stripos($str_two, $end);
        $str_three = substr($str_two, 0, $second_pos);

        $units[] = trim($str_three); // remove whitespaces
        $offset = $pos + strlen($start);
    }
    return $units;
}
请注意,这种方法非常脆弱——如果html稍有更改,代码就会中断;最好使用html解析器来提取这些div的内容。图书馆将是一个很好的起点

编辑 使用simple_html_dom,您只需使用css样式选择器即可获得所需的元素:

// Create DOM from URL or file
$html = file_get_html('https://www.pourtoi.com.au/link.txt');

// Find all m_operation_In 
foreach($html->find('dd.m_operation_In') as $element) { 
    echo $element->src . '<br>';
}

foreach($html->find('span.Unread') as $span) {
    echo $span->src . '<br/>';
}
//从URL或文件创建DOM
$html=file\u get\u html('https://www.pourtoi.com.au/link.txt');
//在中查找所有m_操作
foreach($html->find('dd.m_operation_In')作为$element){
echo$element->src.“
”; } foreach($html->find('span.Unread')为$span){ echo$span->src.“
”; }
能否向我们展示您试图解析的html.txt文件的一部分?对于html字符串中的过度搜索,您可能需要使用html解析器,如或。只需2次搜索,您就可以安全地坚持您的方法,因为它会更快。谢谢您的回复。HTML将不断变化。关于DOM,我正在研究它,因为我是编程新手,我很难理解它。我将再次研究并尝试修复它还有一个问题-您需要下载它并将其添加到您的项目中,但它有一个更友好的界面。好的,我已经包含了simple_html_dom.php库,但是我需要在哪里添加开始和结束标记?