Whats is the best way to obtain the content between two strings e.g.
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}
For some reason this appears to work on one place in my code and not another. Am I going about this in the right way? Or is there a better way?
Also is output buffer the way to do this or file_get_contents?
Thanks in advance!
Use #
instead of /
so you dont have to escape them.
The modifier s
allows .
to match newlines.
{
may be the start of a {n}
or {n,m}
quantifier. The closing }
has no special meaning, but escaping it doesn't cause an error.
The basic
preg_match('#\{FINDME}(.+)\{/FINDME}#s', $out, $matches);
The advanced for various tags etc (styling is not so nice by the javascript).
$delimiter = '#';
$startTag = '{FINDME}';
$endTag = '{/FINDME}';
$regex = $delimiter . preg_quote($startTag, $delimiter)
. '(.*?)'
. preg_quote($endTag, $delimiter)
. $delimiter
. 's';
preg_match($regex,$out,$matches);
Put this code in a function