首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取两个字符串之间的内容PHP

获取两个字符串之间的内容PHP
EN

Stack Overflow用户
提问于 2009-09-18 16:06:49
回答 6查看 72.7K关注 0票数 29

获取两个字符串之间的内容的最佳方法是什么?

代码语言:javascript
复制
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?

提前感谢!

EN

回答 6

Stack Overflow用户

发布于 2009-09-18 16:10:16

为此,您也可以使用substr和strpos。

代码语言:javascript
复制
$startsAt = strpos($out, "{FINDME}") + strlen("{FINDME}");
$endsAt = strpos($out, "{/FINDME}", $startsAt);
$result = substr($out, $startsAt, $endsAt - $startsAt);

你需要添加错误检查来处理它找不到我的情况。

票数 49
EN

Stack Overflow用户

发布于 2018-07-11 11:33:45

如果可能的话,我喜欢避免使用正则表达式,这里有一个替代的解决方案来获取两个字符串之间的所有字符串并返回一个数组。

代码语言:javascript
复制
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}}", "{{", "}}"));

结果:

代码语言:javascript
复制
Array
(
    [0] => fox
    [1] => dog
)
票数 7
EN

Stack Overflow用户

发布于 2014-02-16 06:30:23

我喜欢这两个解决方案

代码语言:javascript
复制
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秒才能找到。

代码语言:javascript
复制
$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 />";
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1445506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档