Contao-Camp 2024
Ergebnis 1 bis 3 von 3

Thema: Frage zu RegEx [gelößt]

  1. #1
    Contao-Urgestein
    Registriert seit
    20.09.2012.
    Ort
    Lüneburger Heide
    Beiträge
    1.971
    Partner-ID
    12207
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    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)
    Autodidakt und HobbyWebdesigner

    www.webdesign24.biz
    Screencasts zu Contao

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

    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
    Contao-Urgestein
    Registriert seit
    20.09.2012.
    Ort
    Lüneburger Heide
    Beiträge
    1.971
    Partner-ID
    12207
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    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
    Autodidakt und HobbyWebdesigner

    www.webdesign24.biz
    Screencasts zu Contao

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
  •