[regex] excluden bij str_replace

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jaron T

Jaron T

08/02/2012 18:58:37
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>


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.
 
PHP hulp

PHP hulp

20/04/2024 11:21:04
 
Wouter J

Wouter J

08/02/2012 19:12:23
Quote Anchor link
Je kan hiervoor 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.
Gewijzigd op 09/02/2012 19:47:37 door Wouter J
 
Jaron T

Jaron T

08/02/2012 19:44:38
Quote Anchor link
Oké, alvast bedankt!
Gewijzigd op 09/02/2012 19:44:31 door Jaron T
 
Jaron T

Jaron T

09/02/2012 19:44:42
Quote Anchor link
bumpje; Is het je nog gelukt wouter? of kan iemand anders me helpen? kom er zelf niet uit..
 
Jaron T

Jaron T

11/02/2012 16:10:06
Quote Anchor link
iemand?
 
Wouter J

Wouter J

12/02/2012 15:48:22
Quote Anchor link
Ik was het half vergeten, maar wat ik dacht kan ook niet. Ik denk dat je het in meerdere regexen moet knippen.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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}
    }
?>


Edit:
Oeps, foutje. Probeer dit eens
Gewijzigd op 12/02/2012 16:59:57 door Wouter J
 
Jaron T

Jaron T

12/02/2012 16:38:26
Quote Anchor link
Bedankt voor de reactie, maar dit geeft als output;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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}
)


Terwijl ik toch de waardes buiten het "block" moet krijgen?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.