PREG_MATCH - RegEx-Problem

  • geschlossen

  • corema
  • 1056 Aufrufe 2 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PREG_MATCH - RegEx-Problem

    morgen,
    ich hab folgendes problem:
    ich hab einen string, der so 'viele möglichkeiten' oder 'viele möglichkeiten (87)' aussehen kann.
    das ding ist, wenn ich in klammern eine zahl habe dann soll die wie "viele möglichkeiten" in ein arrayschlüssel übergeben werden.
    also quasi wenn "(" da istdann "\d\)" mit matchen, wenn nicht dann nicht.
    da habe ich die Look-around assertions gefunden, mit denen ich den passenden ausdruck nicht zusammengestellt bekomme.
    bin quasi so weit:

    PHP-Quellcode

    1. $viele_moeglichkeiten = array(/*ganz viele einträge*/);
    2. $regex1 = '~\A('.implode('|',$viele_moeglichkeiten).')[\s]*\(?(?=(\d*)\))~';
    3. $regex2 = '~\A('.implode('|',$viele_moeglichkeiten).')[\s]*\((?=(\d*)\))~';
    4. preg_match($regex, $string,$re);

    $regex1 matcht auf sowas leider auch auf so was: mist 98)
    $regex2 matcht nur auf das da: mist(19)
    hat da jemand eine schlaude idee wie man das geschickt anstellen kann?
    danke schon mal

    gruß
    corema

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von corema ()

  • Hi,

    warum benutzt du nicht einfach:

    Quellcode

    1. $regex = '~('.implode('|',$viele_moeglichkeiten).')(\s*\((\d+)\))?~';

    Funktioniert bei mir einwandfrei.

    Wobei du dir die Frage stellen solltest, ob es nicht eine foreach-Schleife mit strpos Abfrage nicht auch tut. Zu viel RegEx (vor allem bei simplen "ist Text in Text"-Abfragen) kann, vor allem bei langen Texten, dein ganzes Script verlangsamen.

    Gruß
    Broken Sword
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.
  • so was hatte ich gesucht (wie man zeichen kombiniert optional machen kann)

    der einwand wegen der geschwindigkeit ist berechtig.
    ich habe mal einen speed-test gemacht:
    die preg_match methode ist um 18,75% langsamer

    du hast mich auch drauf aufmerksam gemacht, dass "viele_moeglichkeiten" auch in einem text übergeben werden können, bei dem der regex matcht. das ist natürlich ungünstig, wenn's nach einem match eingetragen wird.
    daher ist preg_match also nicht geeignet.
    sie ist dennoch ne klasse funktion ^^

    dank dir
    gruß