What I want to match is like this:
{% foreach $data $key $value %}233{% endforeach %}2333333{% foreach $data $key $value %}233{% endforeach %}
To match the contents of the first foreach, write a regular expression that looks like a
preg_match_all('/{%\s*foreach\s*(\$\S+)\s*(\$\S+)\s*(\$\S+)\s*%}((?!endforeach)[\s\S]*){%\s*endforeach\s*%}/i', $page, $match);
Because there are two foreach, so I used a negative look, that's the middle part
[\s\s]*]
- -Match the results with no added (?! Endforeach), just started to look around--Daniel
Reply content:
What I want to match is like this:
{% foreach $data $key $value %}233{% endforeach %}2333333{% foreach $data $key $value %}233{% endforeach %}
To match the contents of the first foreach, write a regular expression that looks like a
preg_match_all('/{%\s*foreach\s*(\$\S+)\s*(\$\S+)\s*(\$\S+)\s*%}((?!endforeach)[\s\S]*){%\s*endforeach\s*%}/i', $page, $match);
Because there are two foreach, so I used a negative look, that's the middle part
[\s\s]*]
- -Match the results with no added (?! Endforeach), just started to look around--Daniel
Do you want to imitate the implementation of the template engine?
I think what you want is to transform what you want to match into something like this:
$value): ?>233
In this case, it should not be used to look around, it is easier to solve.