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

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

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?

提前致谢!


答案 1

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

$startsAt = strpos($out, "{FINDME}") + strlen("{FINDME}");
$endsAt = strpos($out, "{/FINDME}", $startsAt);
$result = substr($out, $startsAt, $endsAt - $startsAt);

您需要添加错误检查来处理未找到它的情况。


答案 2
  • 使用而不是这样你就不必逃避它们。#/
  • 修饰使并包括换行符。s.\s
  • {并具有各种功能,例如 中的 n 到 m 次。}{n,m}
  • 基本

    preg_match('#\\{FINDME\\}(.+)\\{/FINDME\\}#s',$out,$matches);
    
  • 各种标签等的高级(javascript的样式不是那么好)。

    $delimiter = '#';
    $startTag = '{FINDME}';
    $endTag = '{/FINDME}';
    $regex = $delimiter . preg_quote($startTag, $delimiter) 
                        . '(.*?)' 
                        . preg_quote($endTag, $delimiter) 
                        . $delimiter 
                        . 's';
    preg_match($regex,$out,$matches);
    

将此代码放在函数中

  • 对于任何你不想执行任何离群的php代码的文件,你应该使用file_get_contents。包含/要求甚至不应该是一个选项。

推荐