获取两个字符串之间的内容的最佳方法是什么?
ob_start();
include('externalfile.html'); ## see below
$out = ob_get_contents();
ob_end_clean();
preg_match('/{FINDME}(.|\n*)+{\/FINDME}/',$out,$matches);
$match = $matches[0];
echo $match;
## I have used .|\n* as it needs to check for new lines. Is this correct?
## externalfile.html
{FINDME}
Text Here
{/FINDME}
由于某些原因,这似乎在我的代码中的一个地方有效,而在另一个地方无效。我做这件事的方式对吗?还是有更好的方法?
同样,输出缓冲区是做这件事的方法还是file_get_contents?
提前感谢!
发布于 2009-09-18 16:10:16
为此,您也可以使用substr和strpos。
$startsAt = strpos($out, "{FINDME}") + strlen("{FINDME}");
$endsAt = strpos($out, "{/FINDME}", $startsAt);
$result = substr($out, $startsAt, $endsAt - $startsAt);
你需要添加错误检查来处理它找不到我的情况。
发布于 2018-07-11 11:33:45
如果可能的话,我喜欢避免使用正则表达式,这里有一个替代的解决方案来获取两个字符串之间的所有字符串并返回一个数组。
function getBetween($content, $start, $end) {
$n = explode($start, $content);
$result = Array();
foreach ($n as $val) {
$pos = strpos($val, $end);
if ($pos !== false) {
$result[] = substr($val, 0, $pos);
}
}
return $result;
}
print_r(getBetween("The quick brown {{fox}} jumps over the lazy {{dog}}", "{{", "}}"));
结果:
Array
(
[0] => fox
[1] => dog
)
发布于 2014-02-16 06:30:23
我喜欢这两个解决方案
function GetBetween($content,$start,$end)
{
$r = explode($start, $content);
if (isset($r[1])){
$r = explode($end, $r[1]);
return $r[0];
}
return '';
}
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);
}
对于上面的两种解决方案,我也做了一些基准测试,而且这两种解决方案的时间几乎相同。您也可以对其进行测试。我给了这两个函数一个要读取的文件,这个文件大约有60000个字符(用word女士的单词计数复习),两个函数都花了大约0.000999秒才能找到。
$startTime = microtime(true);
GetBetween($str, '<start>', '<end>');
echo "Explodin Function took: ".(microtime(true) - $startTime) . " to finish<br />";
$startTime = microtime(true);
get_string_between($str, '<start>', '<end>');
echo "Subsring Function took: ".(microtime(true) - $startTime) . " to finish<br />";
https://stackoverflow.com/questions/1445506
复制相似问题