获取字符串之间的字符串并遍历PHP中的内容

问题描述 投票:1回答:3

下面的函数仅获取第一个匹配项。在这种情况下,它返回:“ John Smith [email protected]”,我如何获得其他名称及其对应的电子邮件。

感谢您的帮助。

<?php
function get_string_between($string, $start, $end)
{

    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
}

////////////// CONTENT TO BE PARSED ///////////////////
$fullstring = 'Name: John Smith<br> Email: [email protected]<br> Name: Perter Doe<br>Email: [email protected]<br> Name: Nelly Denver<br> Email: [email protected]<br>'; 

///////////////////////////////////

$parsed1 = get_string_between($fullstring, "Name:", "<br>");
$parsed2 = get_string_between($fullstring, "Email: ", "<br>");

$parsed = $parsed1.'<br>'.$parsed2.'<br>';

echo $parsed;

?>
php while-loop html-parsing
3个回答
2
投票

似乎您正在尝试分别打印名称和电子邮件值。那么,为什么不尝试这样简单的事情呢?

$fullstring = "Name: John Smith<br> Email: [email protected]<br> Name: Perter Doe<br>Email: [email protected]<br> Name: Nelly Denver<br> Email: [email protected]<br>";
$arr=array_map('trim',array_filter(explode('<br>',$fullstring),'strlen'));

foreach($arr as $value)
{
    echo $value."<br>";
}

输出:

Name: John Smith
Email: [email protected]
Name: Perter Doe
Email: [email protected]
Name: Nelly Denver
Email: [email protected]

如果不需要Name :Email :,只需将下面的echo语句替换为foreach构造内部的语句。

 echo explode(' ',$value)[1]."<br>";

1
投票

strpos()仅能找到第一个事件的数字位置,因此您的函数无法用于发现多个事件。您可以使用带有strpos()的正则表达式来执行此操作:

preg_match_all()

用法:

preg_match_all()

输出:

function get_string_between($string, $start, $end) {
    $start = preg_quote($start);
    $end = preg_quote($end);
    $pattern = "~$start\s*(.*?)$end\s*~";
    $match = preg_match_all($pattern, $string, $matches);
    if ($match) {
        return $matches[1];
    }
}

现在,要打印姓名和电子邮件,您可以像这样循环遍历结果数组:

$parsed1 = get_string_between($fullstring, 'Name:', '<br>');
print_r($parsed1);

$parsed2 = get_string_between($fullstring, 'Email:', '<br>');
print_r($parsed2);

输出:

Array
(
    [0] => John Smith
    [1] => Perter Doe
    [2] => Nelly Denver
)
Array
(
    [0] => [email protected]
    [1] => [email protected]
    [2] => [email protected]
)

$parsed1 = get_string_between($fullstring, 'Name:', '<br>'); $parsed2 = get_string_between($fullstring, 'Email:', '<br>'); for ($i=0; $i < count($parsed1); $i++) { echo $parsed1[$i] . ' ' . $parsed2[$i] . '<br/>'; }


1
投票

这是循环查找所有匹配项的方法:

John Smith [email protected]
Perter Doe [email protected]
Nelly Denver [email protected]

它返回每个开始和结束之间所有字符串的数组,您需要在调用方中使用循环或Demo.来打印它们。

© www.soinside.com 2019 - 2024. All rights reserved.