Senin durumunda, onun ek bir parametre ve parantez preg_match kullanmak daha iyidir:
preg_match("#((?:<|<)%)([\s]*(?:[^ø]*)[\s]*?)(%(?:>|>))#i",$markup, $out);
print_r($out);
Array
(
[0] => <% your stuff %>
[1] => <%
[2] => your stuff
[3] => %>
)
Bu arada, PHP regexpi hata ayıklamak için bu online aracı kontrol, çok yararlı!
http://regex.larsolavtorvik.com/
EDIT: daha hızlı yüzden ben Regexp biraz kesmek. Bunu test, bu :-) çalışıyor
Şimdi tüm bu şeyler anlatalım:
- preg_match o üçüncü param ($ burada out) olarak geçirilen var içinde yakalar her şeyi saklamak olacak
- preg_match şey eşleşirse, dolar üzerinden saklamak olacak [0]
- iç () değil (mi? :) desen şey $ üzerinden saklanır
Ayrıntılarda patten:
#((?:<|<)%)([\s]*(?:[^ø]*)[\s]*?)(%(?:>|>))#i can be viewed as ((?:<|<)%) + ([\s]*(?:[^ø]*)[\s]*?) + (%(?:>|>)).
((?:<|<)%) is capturing < or < then %
(%(?:>|>)) is capturing % then < or >
([\s]*(?:[^ø]*)[\s]*?) means 0 or more spaces, then 0 or more times anything that is not the ø symbol, the 0 or more spaces.
Neden [^ ø] yerine kullanırım. ? Bu çünkü. çok zaman alıcı, regexp motoru, tüm varolan karakterler arasında kontrol edecektir. Karakter ø değilse [^ ø] sadece kontrol. Kimse bir uluslararası para sembolü, ø kullanır, ancak bakım varsa, (7) hangi besbelli bir web sayfasında yazdığınız asla oluyor kabuk çan char chr değiştirebilirsiniz.
EDIT2: Ben sadece tüm maçları yakalama hakkında okumak düzenlemek. Bu durumda, aynı şekilde preg_match_all kullanacağız.