johny7: REGEX: Zeichenfolge finden

Moin allerseits,

ich will aus einem Text sämtliche Leerstellen und die Zeichenfolge '\n' entfernen. Dazu habe ich mit folgender REGEX experimentiert:

  
preg_replace("/[[:space:]\\\\n]/", '', $post['text'])  

Das Problem bei dieser Kette ist, dass alle 'n' gelöscht werden, nicht nur die Folge '\n'. Ich habe jetzt schon mit Klammern aller Art experimentiert, komme aber nicht zur Lösung.

Was mache ich falsch? Übrigens: Ich vermisse nach wie vor eine Schritt-für-Schritt Einleitung in REGEX. Links gesehen?

Grüße, JN

--
ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
http://www.johny7.de
  1. ich will aus einem Text sämtliche Leerstellen und die Zeichenfolge '\n' entfernen.

    Was sind Leerstellen?

    preg_replace("/[[:space:]\\n]/", '', $post['text'])

      
    Was fällt denn alles unter [:space:]? Siehe zweiter Link unten.  
      
    
    > Das Problem bei dieser Kette ist, dass alle 'n' gelöscht werden, nicht nur die Folge '\n'.  
      
    Eckige Klamern definieren Zeichen(-klassen), keine Zeichenfolgen. Man kann aber () und [] mit einem | verknüpfen, nehme ich an.  
      
    
    > Ich vermisse nach wie vor eine Schritt-für-Schritt Einleitung in REGEX. Links gesehen?  
      
    Mein Einstieg war der:  
    <http://www.devmag.net/php/83-regulaere-ausdruecke.html>  
    weiterführend:  
    <http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck>
    
  2. Hi!

    ich will aus einem Text sämtliche Leerstellen und die Zeichenfolge '\n' entfernen. Dazu habe ich mit folgender REGEX experimentiert:

    Du willst also alle Whitespace-Zeichen. Dafür steht die Escape-Sequenz \s, welche bereits \n enthält.

    preg_replace("/[[:space:]\\n]/", '', $post['text'])

    Du hast zu viele \ notiert. Bei der PCRE-Engine kommt \n an, was als ein wörtlicher \ gefolgt von n gedeutet wird. Du willst aber \n haben, also nur \n. Allerdings kannst du auch \n notieren, dann löst PHP diese Sequenz auf und übergibt einen echten Zeilenumbruch. Aber wie gesagt, das \n ist bereits in \s und auch in [:space:] enthalten. Dein Ausdruck verkürzt sich also zu

    preg_replace("/\s/", '', $post['text'])

    Lo!

    1. Moin allerseits,

      Hi!

      ich will aus einem Text sämtliche Leerstellen und die Zeichenfolge '\n' entfernen. Dazu habe ich mit folgender REGEX experimentiert:

      Du willst also alle Whitespace-Zeichen. Dafür steht die Escape-Sequenz \s, welche bereits \n enthält.

      Oder eben die Zeichenklasse space

      preg_replace("/[[:space:]\\n]/", '', $post['text'])

      Du hast zu viele \ notiert. Bei der PCRE-Engine kommt \n an, was als ein wörtlicher \ gefolgt von n gedeutet wird. Du willst aber \n haben, also nur \n. Allerdings kannst du auch \n notieren, dann löst PHP diese Sequenz auf und übergibt einen echten Zeilenumbruch. Aber wie gesagt, das \n ist bereits in \s und auch in [:space:] enthalten. Dein Ausdruck verkürzt sich also zu

      preg_replace("/\s/", '', $post['text'])

      Nö. Ich will nicht nur die eigentlichen Zeilenumbrüche notieren. Sondern wirklich die Zeichenfolge \n. Das hängt damit zusammen, dass die Daten per AJAX gesendet werden und in die DB geschrieben werden. Deshalb steht dort nicht einfach ein Zeilenumbruch, sondern die Zeichenfolge \n. Kontextwechsel eben. Aber mit der Information von texter bin ich zum Ziel gekommen.

      Grüße, JN

      --
      ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
      http://www.johny7.de
      1. Du willst also alle Whitespace-Zeichen. Dafür steht die Escape-Sequenz \s, welche bereits \n enthält.
        Oder eben die Zeichenklasse space

        Nicht wirklich:

        The "space" characters are HT (9), LF (10), VT (11), FF (12), CR  (13),
               and  space  (32). Notice that this list includes the VT character (code
               11). This makes "space" different to \s, which does not include VT (for
               Perl compatibility).

        Bei allen anderen POSIX-Zeichenklassen ist das auch so - das machen PCRE nur weil sie "nett" sind und POSIX unterstützen, sobald man sich aber im UTF-8 mode befindet, sieht die Sache gänzlich anders aus.

        Wenn man PCRE verwendet, sollte man bei PCRE bleiben und nicht irgendwelche POSIX-Krüppel verwenden - außer vielleicht, man muss schnell etwas portieren und hat "keine Zeit". :)

      2. Hi!

        Nö. Ich will nicht nur die eigentlichen Zeilenumbrüche notieren. Sondern wirklich die Zeichenfolge \n.

        Ah, ok, dann aber auch keine Zeichenklasse sondern \s|\\n, so wie es der Texter schon gesagt hat.

        Lo!

      3. Hi,

        Nö. Ich will nicht nur die eigentlichen Zeilenumbrüche notieren. Sondern wirklich die Zeichenfolge \n. Das hängt damit zusammen, dass die Daten per AJAX gesendet werden und in die DB geschrieben werden. Deshalb steht dort nicht einfach ein Zeilenumbruch, sondern die Zeichenfolge \n. Kontextwechsel eben.

        Und *warum* dieser „Kontextwechsel“?
        Welcher Kontext soll da betroffen sein?

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?