下面的函数仅获取第一个匹配项。在这种情况下,它返回:“ 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;
?>
似乎您正在尝试分别打印名称和电子邮件值。那么,为什么不尝试这样简单的事情呢?
$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>";
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/>';
}
这是循环查找所有匹配项的方法:
John Smith [email protected]
Perter Doe [email protected]
Nelly Denver [email protected]
它返回每个开始和结束之间所有字符串的数组,您需要在调用方中使用循环或Demo.来打印它们。