查找最接近所需位置的子字符串



我有一个需要出现的大字符串。我需要找到最接近此事件的子字符串。

例如:

<p>one</p><p>two</p><p>three and some more</p><p>four</p><p>five</p>

正在寻找"三个",我知道它的位置,我只需要得到<p>块。

<p>three and some more</p>

我可以在没有正则表达式的情况下找到具有已知位置的最接近<p>吗?

我认为您可以将字符串explode()为数组,并从数组中获取已知的子字符串位置

$string = '<p>one</p><p>two</p><p>three and some more</p><p>four</p><p>five</p>';
$str_array = explode("</p>",$string);
$sub_str = $str_array[2].'</p>';
echo $sub_str;
//output <p>three and some more</p>

现场样品

如果我站稳了,你需要找到这个词的出现three

$string = '<p>one</p><p>two</p><p>three and some more</p><p>four</p><p>five</p>';
$str_array = explode("</p>",$string);
foreach($str_array as $value)
{
    if(strpos($value,'three'))
    {
        $sub_str = $value.'</p>';
    }
}
echo $sub_str;
//output <p>three and some more</p>

现场样品

使用

strpos 和起始索引进行搜索,使用 strrpos 进行搜索。

已编辑:strrpos 查找最后一个匹配项,因此您需要在之前剪切字符串。

$s = "<p>one</p><p>two</p><p>three and some more</p><p>four</p><p>five</p>";
$position = strpos($s, "three");
$end_p = strpos($s, "</p>", $position);
$previous_p = strrpos(substr($s, 0, $position), "<p>");
var_dump(substr($s, $previous_p, $end_p - $previous_p + 4));

最新更新