PHP Regex per afferrare {tag} {qualcosa / tag}
-
19-09-2019 - |
Domanda
Sto cercando di venire = con una stringa regex da utilizzare con le funzioni PHP preg (preg_match, ecc) e sono perplesso su questo:
Come si corrispondono questa stringa:?
{area-1}some text and maybe a <a href="http://google.com">link</a>.{/area-1}
Voglio sostituirlo con una stringa diversa utilizzando preg_replace.
Finora sono stato in grado di identificare il primo tag con preg_match in questo modo:
preg_match("/\{(area-[0-9]*)\}/", $mystring);
Grazie se si può aiutare!
Soluzione
Se non si dispone di tag annidati, qualcosa di così semplice dovrebbe funzionare:
preg_match_all("~{.+?}(.*?){/.+?}~", $mystring, $matches);
I tuoi risultati possono essere poi trovati in $matches[1]
.
Altri suggerimenti
Vorrei suggerire
preg_match_all("~\{(area-[0-9]*)\}(.*?)\{/\1\}~s", $mystring, $matches);
Questo funziona anche se altri tag sono annidati all'interno del tag area
che stai guardando.
Se si dispone di diversi tag area
annidati uno dentro l'altro, sarà ancora funzionare, ma è necessario applicare le più volte regex (una volta per ogni livello di nidificazione).
E, naturalmente, il contenuto delle partite saranno in $matches[2]
, non $matches[1]
come nella risposta di Tatu.