[regex] excluden bij str_replace
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$string = "{var} [START abc] {var} [END abc] [START troll] {var2} [END troll] hoi";
// deze regel haalt alles op binnen [START] en [END], ik kan in het result ($matches) controleren of dat het woord {var} voor komt
preg_match_all("#\[START (.+?)\](.+?)\[END (.+?)]#s", $string, $matches);
?>
$string = "{var} [START abc] {var} [END abc] [START troll] {var2} [END troll] hoi";
// deze regel haalt alles op binnen [START] en [END], ik kan in het result ($matches) controleren of dat het woord {var} voor komt
preg_match_all("#\[START (.+?)\](.+?)\[END (.+?)]#s", $string, $matches);
?>
Maar hoe kan ik er nu voor zorgen dat alleen {var} (dmv str_replace ?) wordt veranderd die BUITEN een [START] [END] block staat?
Ik hoop dat het allemaal een beetje duidelijk is.
Alvast bedankt.
preg_replace_callback gebruiken. Hoe dat in dit geval in zijn werking gaat heb ik wel in mijn hoofd, maar nog niet getest. Dus ik zal het straks (na het testen) geven.
Je kan hiervoor Gewijzigd op 09/02/2012 19:47:37 door Wouter J
Gewijzigd op 09/02/2012 19:44:31 door Jaron T
bumpje; Is het je nog gelukt wouter? of kan iemand anders me helpen? kom er zelf niet uit..
iemand?
Met 1 regex haal je alles op dat niet tussen [START] en [END] staat en daarna controleer je of dit {var} bevat en dat verander je dan. Dus ong. zoals je nu bezig bent, even uit mijn hoofd:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$str = "{var} [START foo] {var} [END foo] [START bar] {var2} [END bar]";
preg_match_all('/(?:^|\[END.*?\])(.*?)\[START.*?\]/', $str, $strs);
foreach( $strs as $s )
{
// doe wat met {var}
}
?>
$str = "{var} [START foo] {var} [END foo] [START bar] {var2} [END bar]";
preg_match_all('/(?:^|\[END.*?\])(.*?)\[START.*?\]/', $str, $strs);
foreach( $strs as $s )
{
// doe wat met {var}
}
?>
Edit:
Oeps, foutje. Probeer dit eens
Gewijzigd op 12/02/2012 16:59:57 door Wouter J
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Array
(
[0] => {var} [START foo] {var} [END foo]
[1] => [START bar] {var2} [END bar]
)
Array
(
[0] => {var} [START foo] {var}
[1] => {var2}
)
(
[0] => {var} [START foo] {var} [END foo]
[1] => [START bar] {var2} [END bar]
)
Array
(
[0] => {var} [START foo] {var}
[1] => {var2}
)
Terwijl ik toch de waardes buiten het "block" moet krijgen?