使用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库,但是我需要在哪里添加开始和结束标记?