我发现这个函数可以在两个文本字符串,html或其他内容之间获取数据.
如何更改以便找到所有事件?每次出现$ start [some-random-data] $ end之间的每个数据.我想要文档的所有[某些随机数据](它将始终是不同的数据).
function getStringBetween($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);
}
Run Code Online (Sandbox Code Playgroud)
rai*_*7ow 35
一种可能的方法:
function getContents($str, $startDelimiter, $endDelimiter) {
$contents = array();
$startDelimiterLength = strlen($startDelimiter);
$endDelimiterLength = strlen($endDelimiter);
$startFrom = $contentStart = $contentEnd = 0;
while (false !== ($contentStart = strpos($str, $startDelimiter, $startFrom))) {
$contentStart += $startDelimiterLength;
$contentEnd = strpos($str, $endDelimiter, $contentStart);
if (false === $contentEnd) {
break;
}
$contents[] = substr($str, $contentStart, $contentEnd - $contentStart);
$startFrom = $contentEnd + $endDelimiterLength;
}
return $contents;
}
Run Code Online (Sandbox Code Playgroud)
用法:
$sample = '<start>One<end>aaa<start>TwoTwo<end>Three<start>Four<end><start>Five<end>';
print_r( getContents($sample, '<start>', '<end>') );
/*
Array
(
[0] => One
[1] => TwoTwo
[2] => Four
[3] => Five
)
*/
Run Code Online (Sandbox Code Playgroud)
演示.
您可以使用正则表达式执行此操作:
function getStringsBetween($string, $start, $end)
{
$pattern = sprintf(
'/%s(.*?)%s/',
preg_quote($start),
preg_quote($end)
);
preg_match_all($pattern, $string, $matches);
return $matches[1];
}
Run Code Online (Sandbox Code Playgroud)