PHP regex
3 naročniki
3 naročniki
Pozdravljeni,
naletel sem na problem, ki mi rahlo greni življenje in mislim, da bi ga kdo tukaj brez večjega problema rešil.
// prvi
$ref = preg_match_all( "{\[ref\](.*)\[\/ref\]}i", $txt, $ret );
// drugi
$ref = preg_match_all( "{\[ref\]([^\[\/ref\]]*.*)\[\/ref\]}i", $txt, $ret );
Mene zanima vse med tagoma [ref] in [/ref], kar ni problematično, je pa problem če se pojavita dva v istem subjectu ($txt), ker dobim nazaj vse kar je med zunanjima dvema.
Upam da ima kdo minutko časa in volje za pomoč.
Hvala
2 odgovora
Preberi si malo o Pattern Modifiers. Zanima te U (PCRE_UNGREEDY).
btw: drugi regular expression nima smisla, tam si dolocil le to, da takoj za [ref] ne sme biti znakov [, /, r, e, f ali ], vendar, ker si uporabil potem *, ki matcha tudi 0 znakov, je ta del povsem brez veze. Je pa tudi brez veze, ker ni to, kar si zelel doseci :)
$txt = "[ref]REF1[/ref] Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n";
$txt.= "In nec pede a nulla placerat bibendum. [ref]REF2[/ref] Maecenas nec turpis eu diam pretium aliquam.";
$ref = array();
if(preg_match_all("#\[ref\](.*?)\[\/ref\]#i",$txt,$matches,PREG_SET_ORDER)) {
foreach($matches as $match) {
$ref[] = $match[1];
}
}
var_export($ref);
output:
array ( 0 => 'REF1', 1 => 'REF2', )