以下功能仅提取第一次出现的内容。在这种情况下,它返回:" John Smith jsmith@gmail.com" ;,如何使用相应的电子邮件获取其他名称。
感谢您的帮助。
<?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: jsmith@google.com<br> Name: Perter Doe<br>Email: peterd@yahoo.com<br> Name: Nelly Denver<br> Email: neldenver@google.co.za<br>';
///////////////////////////////////
$parsed1 = get_string_between($fullstring, "Name:", "<br>");
$parsed2 = get_string_between($fullstring, "Email: ", "<br>");
$parsed = $parsed1.'<br>'.$parsed2.'<br>';
echo $parsed;
?>
答案 0 :(得分:2)
好像你正试图分别打印名称和电子邮件的价值。那你为什么不尝试这样简单的东西?
$fullstring = "Name: John Smith<br> Email: jsmith@google.com<br> Name: Perter Doe<br>Email: peterd@yahoo.com<br> Name: Nelly Denver<br> Email: neldenver@google.co.za<br>";
$arr=array_map('trim',array_filter(explode('<br>',$fullstring),'strlen'));
foreach($arr as $value)
{
echo $value."<br>";
}
输出:
Name: John Smith
Email: jsmith@google.com
Name: Perter Doe
Email: peterd@yahoo.com
Name: Nelly Denver
Email: neldenver@google.co.za
如果您不需要Name :
和Email :
,只需将下面的 echo
语句替换为 {{1}内的语句构建。
foreach
答案 1 :(得分:1)
strpos()
只能找到第一次出现的数字位置,因此您的函数不能用于查找多次出现。您可以使用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] => jsmith@google.com
[1] => peterd@yahoo.com
[2] => neldenver@google.co.za
)
现在,要打印名称和电子邮件,您只需循环遍历结果数组,如下所示:
$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 jsmith@google.com
Perter Doe peterd@yahoo.com
Nelly Denver neldenver@google.co.za
答案 2 :(得分:1)
这是循环查找所有匹配的方法:
function get_string_between($string, $start, $end) {
$last_end = 0;
$matches = array();
while (($ini = strpos($string, $start, $last_end)) !== false) {
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
$matches[] = substr($string, $ini, $len);
$last_end = $ini + $len + strlen($end);
}
return $matches;
}
它返回每个开始和结束之间所有字符串的数组,您需要在调用者中使用循环或implode()
来打印它们。