RegEx Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • RegEx Problem

    Moin,

    bin gerade dabei eine kleine Suchabfrage zu erstellen und sehe den Wald vor lauter Bäumen nicht mehr.

    Das ganze zu erklären wäre glaube schwieriger als sich den Code einmal anzuschauen. Deshalb hier einmal der PHP-Code.

    Code:
    $search_pattern       = array();
    $search_pattern[0]    = '#([A-Za-z0-9]+) außerhalb ([A-Za-z0-9]+)#i';
    $search_pattern[1]    = '#([A-Za-z0-9]+) außerhalb von ([A-Za-z0-9]+)#i';
    
    $search_replace        = array();
    $search_replace[0]    = 'OK: $1 außerhalb $2';
    $search_replace[1]    = 'OK: $1 außerhalb  von $2';
    
    echo preg_replace($search_pattern, $search_replace, $string);
    Ich möchte wenn ich in $string "spielen außerhalb von hamburg" eingebe, nur den $search_replace[1] ausführen und nicht zusätzlich $search_replace[0].

    Das aktuelle Ergebnis wäre:
    Code:
    OK: OK: spielen außerhalb von hamburg
    Wie kann ich den restlichen String quasi als Pflichtbediung setzen?

    Eine andere Idee wäre von mir gewesen, das ich vorher einfach von $string die wörter zähle und dannach den Array anlege, ich möchte das ganze aber recht variable halten.

    Hat jemand eine Idee?

    Gruß
    Zuletzt geändert von tjark; 26.02.2013, 15:54.

  • #2
    Mehr fällt mir dazu gerade nicht ein. Eine andere Möglichkeit bestünde darin, "außerhalb von" und nur "außerhalb" gleich mit stripos abzufragen. Ansonsten müsstest Du da tiefer in RegEx eintauchen und dann Ausdrücke mit "gefolgt von" und "nicht gefolgt von" oder so verwenden.


    PHP-Code:
    <?php

    $string 
    "spielen außerhalb von Hamburg";

    $search_pattern = array();
    $search_replace = array();

    $search_replace[1] = 'OK: $1 außerhalb von $2';
    $search_pattern[1] = '#([a-z0-9]+) außerhalb von ([a-z0-9]+)#i';

    $gefuellt preg_replace($search_pattern$search_replace$string);

    $pos stripos($gefuellt'OK:');

    if (
    $pos !== false) {
        echo 
    $gefuellt;
    }
    else {
        
    $search_pattern[0] = '#([a-z0-9]+) außerhalb ([a-z0-9]+)#i';
        
    $search_replace[0] = 'OK: $1 außerhalb $2';

        
    $gefuellt preg_replace($search_pattern$search_replace$string);
        echo 
    $gefuellt;
    }
    ?>

    Kommentar

    Lädt...
    X