猿问

获取两个字符串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?


慕慕森
浏览 1185回答 3
3回答

ABOUTYOU

使用#而不是/你不必逃避它们。该修改 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。include / require甚至不应该是一个选项。

LEATH

您也可以使用substr和strpos。$startsAt = strpos($out, "{FINDME}") + strlen("{FINDME}");$endsAt = strpos($out, "{/FINDME}", $startsAt);$result = substr($out, $startsAt, $endsAt - $startsAt);您需要添加错误检查以处理它不是FINDME的情况。
随时随地看视频慕课网APP
我要回答