roger: <br> entfernen gegen bedingt Leerzeichen

Hallo,

ich lese einen HTML-String ein.

Diese Zeile lautet z.B. "Hans Dampf<br>Schillerstrasse"
                   oder "Hans Dampf <br>Schillerstrasse"
                   oder "Hans Dampf<br> Schillerstrasse"
                   oder "Hans Dampf Schillerstrasse"

Nun möchte ich <br> gegen ein Leerzeichen ersetzen, jedoch nur wenn vor oder nach <br> kein Leerzeichen ist.
Kann ich dies in einen 1 Zeiler schreiben oder muss ich hier if else usw.
zurückgreifen.

Gruß
         roger

  1. Ab perl 5 werden sogenannte look-aheads eingeführt:

    (?!\s)<br>(?!\s)

    (?!...) bedeutet, dass ... nicht vorkommen darf, ohne dass es dabei gematcht würde.

    Gruß, LX

    --
    RFC 2324, Satz 7 (Sicherheit): Jeder, der zwischen meinem Kaffee und mir steht, gilt als unsicher.
    1. Hi,

      Ab perl 5 werden sogenannte look-aheads eingeführt:

      (?!\s)<br>(?!\s)

      (?!...) bedeutet, dass ... nicht vorkommen darf, ohne dass es dabei gematcht würde.

      Wobei das aber auf bla <br>bla matcht.
      Denn der erste Lookahead sagt: an dieser Stelle darf kein Whitespace folgen.
      Und das < danach sagt: an dieser Stelle muß ein < folgen.
      Und da < kein Whitespace ist, matcht der Ausdruck.

      Vorne muß es ein negative lookbehind (?<!...) sein, hinten ein negative lookahead (?!...).

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      1. Hallo,

        ich check es nicht. Hier mein Code.

        my $text = 'Hallo das ist ein <br>Text';  
          
        print "$text\n";  
          
        if ($text =~ /(?!\s)<br>(?!\s)/)  
        { $text =~ s/<br>/ /ig; }  
        else  
        { $text =~ s/<br>//ig; }  
          
        print "$text\n";
        

        Vielleicht sitze ich auf der Leitung.
        Dann hätte ich noch das Problem
        my $text = 'Hallo das ist ein <br> Text';
        d.h. wenn vor und nach <br> ein Leerzeichen steht. Dann müsste ich z.B. $text =~ s/ <br>//ig; ersetzen.

        Ich sehe es einfach nicht.

        Gruß
                 roger

        1. Dann hätte ich noch das Problem

          Dass du besser eine Callback Funktion verwenden solltest, um deine Probleme kontrolliert zu behandeln.

          $text =~ s/ ( \s* <br> \s* ) /breakify($1)/gex;  
          sub breakify{  
            $_[0] eq " <br>" and return "bla";  
            $_[0] eq "<br> " and return "blub";  
            $_[0] eq " <br> " and return "smurf";  
            return "gulb"  
          }  
          
          

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Dass du besser eine Callback Funktion verwenden solltest, um deine Probleme kontrolliert zu behandeln.

            $text =~ s/ ( \s* <br> \s* ) /breakify($1)/gex;

            sub breakify{
              $[0] eq " <br>" and return "bla";
              $
            [0] eq "<br> " and return "blub";
              $_[0] eq " <br> " and return "smurf";
              return "gulb"
            }

            
            >   
            > mfg Beat  
              
              
            Hallo,  
              
            das ist schon lecker  
              
             Danke  
               roger