Suche Regulären Ausdruck

bdt600

Erfahrenes Mitglied
Hallo zusammen,
ich und reguläre Ausdrücke, wir werden wohl niemals Freunde :(

Ich habe z.B. folgenden String (Pfadangabe) : dies/das/jenes

Jetzt muss ich mit PHP prüfen, ob "dies" und "jenes" in dem String vorkommt, wobei "dies" am Anfang stehen muss und alles, was dazwischen und danach steht, egal ist, also

dies/das/jenes => ok
dies/das/jenes/sonstwas => ok

dies/das/sonstwas => nicht ok
sonstwas/das/jenes => nicht ok
sonstwas/dies/das/jenes => nicht ok

Kann mir bitte jemand auf die Sprünge helfen?
Danke im voraus.
 
Lösung
Alles klar, Du setzt im Pattern eine Variable ein, die einen Slash enthält. Dann wäre es recht umständlich, diesen zu escapen und ich empfehle statt dessen die Lösung mit dem "|" als Delimiter. Dies funktioniert dann bei mir:
Code:
    // Soll am Anfang stehen
    $search  = "dies/jenes";
$reg = "|^/?$search|";
Das ist eine einfache Aufgabe, die man lösen kann, ohne die letzten Feinheiten von Regex zu kennen:
/^dies.+jenes/
 
Yep, wo ein Pferd einmal gescheut hat, tut es das immer. Heute, wo der Trend mehr dahin geht, ausführliche und sprechende Namen zu verwenden, geht die kryptische Syntax auch ein wenig an der Zeit vorbei aber auf der anderen Seite ist es sehr kompakt und mächtig.
 
geht die kryptische Syntax auch ein wenig an der Zeit vorbei aber auf der anderen Seite ist es sehr kompakt und mächtig.
Keine Frage, absolut richtig.

Ich habe bei mir jetzt doch noch ein kleines Problem gefunden. Es geht bei mir um die Auswertung von Log-Files. Ich habe festgestellt, das je nach System die Pfade unterschiedlich ausgegeben werden, mal so
dies/das/jenes und mal so /dies/das/jenes, als mit einem Slash am Anfang.
Also passt ja nicht /^dies.+jenes/ weil "dies" nicht zwingend am Anfang steht.
Könntest du mir bitte noch mal auf die Sprünge helfen? Danke!
 
Klappt leider immer noch nicht ganz. Folgendes Problem:

Der Pfad enthält Slashes nicht nur am Anfang, also in etwa so:

/dies/sonstiges

Damit kommt dann: Warning: preg_match(): Unknown modifier 'o'

Oder

/dies/das > Warning: preg_match(): Unknown modifier 'd'

Muss ich in PHP alle / durch \/ ersetzen oder kann man das auch mit dem RegEx lösen?
Schon mal ein großes Danke.
 
Da die Fehlermeldung lautet "Unknown modifier 'o'" vermute ich, dass Du den Slash im Pattern verwendet hast? In dem Fall musst Du allerdings jedes Mal dem Slash eine Backslash voran stellen. Du kannst allerdings auch ein anderes Zeichen als Delimiter verwenden, z. B. so:
$re = '|^/?dies.+/jenes|';
Das macht das Ganze etwas übersichtlicher wenn, wie in deinem Fall, viele Slashes drin sind.
Wenn das das Problem nicht löst, dann poste doch mal ein Beispiel mit vollständigem String und Regex
 
Hier mal ein Beispiel:
PHP:
<?php
   error_reporting(E_ALL);
   ini_set('display_errors', true);
 
   // Zu prüfender Pfad
   $path = "/dies/sonstigies";
 
   // Soll am Anfang stehen
   $search = "dies";
 
   $reg = "/^\/?$search/";

   // Hier wird OK ausgegeben
   if (preg_match($reg, $path))
     echo "OK<br>";
   else
     echo "Nicht OK<br>";
   
   // Zu prüfender Pfad
   $path  = "/dies/jenes/sonstiges/welches";
 
   // Soll am Anfang stehen
   $search  = "dies/jenes";
   
   $reg = "/^\/?$search/";
   
   // Hier Warning: preg_match(): Unknown modifier 'j'
   if (preg_match($reg, $path))
     echo "OK<br>";
   else
     echo "Nicht OK<br>";
?>
 
Zurück