33 geniale Contao-Erweiterungen, die du kennen solltest! - Contao Academy
Ergebnis 1 bis 3 von 3

Thema: Frage zu RegEx [gelößt]

  1. #1
    Alter Contao-Hase
    Registriert seit
    20.09.2012.
    Ort
    Lüneburger Heide
    Beiträge
    1.417
    User beschenken
    Wunschliste

    Standard Frage zu RegEx [gelößt]

    Hallo Leute,

    folgende Methode filtert einen vom Nutzer eingegebenen Text.
    PHP-Code:
    /**
         * Hilfsfunktion um den vom Nutzer eingegebenen Text zu korrigieren.
         * @param type $text
         * @return type
         */
        
    function textKorrektur($text) {
    //        echo '--> textKorrektur<br>';
            
    $zeichenkette $text;

            
    $suchmusterContainer = ["[^']" => ''"['$]" => '''[\s+]' => ' ''["]' => "'"'[\s$]' => '''[-]' => "/",];

            foreach (
    $suchmusterContainer as $suchmuster => $ersetzung) {
                
    $zeichenkette preg_replace($suchmuster$ersetzung$zeichenkette);
            }

    //        echo 'textKorrektur --><br>';
            
    return $zeichenkette;
        } 
    Im letzten Schritt:
    PHP-Code:
    '[-]' => "/"
    werden alle "Minus"-Zeichen in einen "/" umgewandelt.
    Jetzt benötige ich aber folgendes.
    Es sollen, wie gehabt, alle Minuszeichen in einen "/" umgewandelt werden, außer wenn die Minuszeichen in einer Klammer stehen --> (-) <-- .

    Auf folgenden Seiten habe ich bisher nachgesehen.
    - https://www.phpliveregex.com/
    - https://ahkde.github.io/docs/misc/RegEx-QuickRef.htm

    Hat jemand einen Tipp für mich?

    Gruß
    tschero
    Geändert von tschero (26.11.2019 um 15:49 Uhr)

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.303

    Standard

    Negative Lookahead (oder Lookbehind) im RegEx sollte Dein Freund sein.

    Also wahrscheinlich in etwa so:

    Code:
    [-(?!\))]
    mit der Klammer ) als \) "escaped".

    Das allgemeine Muster für "ein x nicht gefolgt von einem y" wäre

    Code:
    x(?!y)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  3. #3
    Alter Contao-Hase
    Registriert seit
    20.09.2012.
    Ort
    Lüneburger Heide
    Beiträge
    1.417
    User beschenken
    Wunschliste

    Standard

    Moin fiedsch,

    genau das hab ich gesucht. Funktioniert sehr gut. Die Anweisung deckt momentan alles ab was ich benötige.


    PHP-Code:
    /**
         * Hilfsfunktion um den vom Nutzer eingegebenen Text zu korrigieren.
         * @param type $text
         * @return type
         */
        
    function textKorrektur($text) {
    //        echo '--> textKorrektur<br>';
            
    $zeichenkette $text;
            
    //Mehrere Leerzeichen hintereinander zu einem Leerzeichen
            //und alle doppelten Anfuehrungszeichen zu einfachen Anfuehrungszeichen
            // und alle Bindestriche zu "Slash" wenn die Bindestriche nicht in einer Klammer stehen
            
    $suchmusterContainer = ["[^']" => ''"['$]" => '''[\s+]' => ' ''["]' => "'"'[\s$]' => '''[-(?!\))]' => "/"];

            foreach (
    $suchmusterContainer as $suchmuster => $ersetzung) {
                
    $zeichenkette preg_replace($suchmuster$ersetzung$zeichenkette);
            }

    //        echo 'textKorrektur--><br>';
            
    return $zeichenkette;
        } 
    Herzlichen Dank für die Hilfe.

    Gruß
    tschero

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •