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 à CONTENT2Et 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!

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top