Question
J'utilise Regex pour obtenir des parties spécifiques d'un fichier via PHP!
Permettez-moi de vous montrer un exemple d'entrée:
=== KEYWORD1 ===
CONTENT
==== ANOTHERKEYWORD ====
CONTENT2
=== TESTKEYWORD ===
CONTENT3
Mon regex est peut-être maintenant: $pattern = "/.*=+ SEARCHTERM =+(.*?)=+.*=+.*/s";
SEARCHTERM
est la partie flexible de mon regex.
Ici, un aperçu de ce que j'attends d'obtenir et de ce que je reçois:
- Lorsque TERME DE RECHERCHE est remplacé par Mot-clé1 Je m'attends à
CONTENT
Mais ne recevez rien - Lorsque TERME DE RECHERCHE est remplacé par Un autre mot de contrôle Je m'attends à
CONTENT2
Et obtenez-le (donc cette affaire fonctionne - Lorsque TERME DE RECHERCHE est remplacé par Mot de test Je m'attends à
CONTENT3
Et ne soyez rien
Donc, la partie critique est qu'il y a peut être mais ne doit pas être une ligne vide au-delà du term de recherche ET que le regex doit d'abord regarder s'il y a un autre === n'importe quoi === après SearchTerm et seulement s'il n'y en a pas, lisez tout jusqu'à la fin des fichiers.
j'ai pensé à $pattern = "/.*=+ SEARCHTERM =+(.*?)[=+.*=+.*|.*]/";
Mais cela jette des syntaxerreurs.
Toute aide est très appréciée!
La solution
Essayez avec:
$str = <<<EOD
=== KEYWORD1 ===
CONTENT
==== ANOTHERKEYWORD ====
CONTENT2
=== TESTKEYWORD ===
CONTENT3
EOD;
foreach(array('KEYWORD1', 'ANOTHERKEYWORD', 'TESTKEYWORD') as $keyword) {
preg_match("/.*=+ $keyword =+([^=]+)/m", $str, $m);
echo "$keyword -> $m[1]\n";;
}
production:
KEYWORD1 ->
CONTENT
ANOTHERKEYWORD ->
CONTENT2
TESTKEYWORD ->
CONTENT3