获取两个字符串之间的内容的最佳方法是什么?
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}
出于某种原因,这似乎在我的代码中的一个地方工作,而不是另一个地方。我这样做对吗还是有更好的办法?
另外,是输出缓冲区的方式来做到这一点或文件_得到_内容?
先谢谢你了!
7条答案
按热度按时间zzlelutf1#
你也可以使用substr和strpos。
您需要添加错误检查来处理它没有FINDME的情况。
mi7gmzs62#
#
而不是/
,这样你就不必逃避它们了。s
允许.
匹配换行符。{
可以是{n}
或{n,m}
量词的开始。关闭的}
没有特殊意义,但是转义它不会导致错误。将此代码放入函数中
drkbr07n3#
如果可能的话,我喜欢避免使用正则表达式,这里有一个替代方案来获取两个字符串之间的所有字符串并返回一个数组。
结果如下:
y0u0uwnf4#
我喜欢这两种解决方案
我也做了一些基准测试,以及与上述两个解决方案,都是给几乎相同的时间。你也可以测试一下。我给这两个函数都提供了一个文件来读取,这个文件大约有60000个字符(与Ms. Word的字数),两个函数都需要大约0.000999秒才能找到。
093gszye5#
换行符可能会导致RegEx出现问题,请在处理之前尝试将其删除或替换为\n。
dwbf0jvd6#
这是一个PHP解决方案,返回在haystack中的标记之间找到的字符串。它工作,但我还没有测试的效率。我需要这一点,并受到亚当赖特在这一页上的答案的启发。
返回一个数组(),其中包含在$haystack中$tag和$end_symbol.$tag之间找到的所有字符串,如果没有找到$end_symbol.$tag,则返回FALSE,因此$haystack中不存在标记对。
5ktev3wc7#
快速的方法把所有的东西放在一个字符串。