[perl] Doppelbuchstaben

Diskutiere [perl] Doppelbuchstaben im Ruby, php, Perl, Python ... Forum im Bereich Programmieren unter Linux/Unix; Moin! Ich moechte gerne aus einerTextdatei alle Doppelbuchstaben raussuchen, in Klammern fassen, und anschliessend nur die Zeilen mit den...

  1. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Moin!
    Ich moechte gerne aus einerTextdatei alle Doppelbuchstaben raussuchen, in Klammern fassen, und anschliessend nur die Zeilen mit den Doppelbuchstaben ausgeben.
    Geht auch soweit:

    Code:
    #!/usr/bin/perl -w
    
    $pfad="~/geschichte.txt";
    
    
    open(DATEI, "<$pfad") || die "Datei nicht gefunden!\n";
    
    
    while ($line = <DATEI>) {
    
    if ($line =~ s/aa|bb|dd|ee|ff|gg|hh|ii|jj|kk|ll|mm|nn|oo|pp|rr|ss|tt|uu|zz/($&)/g) {
    $line =~ /(..)/;
    print "$line";
       }
    }
    
     close(DATEI);
    
    Ich finde aber, der Suchstring ist dummes Zeug. Das muss doch einfacher gehen!

    Code:
    s/[a-z]{2}/($&)/g
    Bringt mir zwar zwei aufeinander folgende Buchstaben, aber keine doppelten.

    Ich sitze schon die ganze Nacht davor, und hab grad ne Blockade.
     
  2. #2 angelsfall, 17.09.2007
    Zuletzt bearbeitet: 17.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Code:
    s/([a-z])\1/($1)/g
    Kann mir ma jemand sagen, wieso ich noch im matchen nich mit $1 sondern nur mit \1 dereferenzieren kann?

    {edit}
    Code:
    $line =~ /(..)/;
    Die Zeile ist sinnlos. Sie matcht alles, was zwei beliebige Zeichen beinhaltet, und setzt eine Referenz drauf. Du holst dir aber weder den Rückgabewert noch dereferenzierst du das Matching.
     
  3. #3 buli, 17.09.2007
    Zuletzt bearbeitet: 17.09.2007
    buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Vielen Dank!
    Damit werden die Doppelten Buchstaben zwar gefunden, aber in der Ersetzung erhalte ich nur einen von beiden.
    Mit
    Code:
    s/([a-z])\1/($1$1)/g
    gehts.

    /edit:
    Ich weiss zwar nicht, wovon du redest, aber ich hab sie mal auskommentiert, und tut astrein!
    :)
     
  4. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Probier mal:
    Code:
    s/(.)\1/($&)/g;
     
  5. #5 buli, 17.09.2007
    Zuletzt bearbeitet: 17.09.2007
    buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Ja, da werden aber auch Punkte mit eingeschlossen. Und ich will ausschliesslich Doppelbuchstaben.

    Code:
    s/([a-z])\1/($1$1)/g
    Tut.

    /edit:
    gefaellt mir aber immer noch nicht so richtig.
    Es kann nicht sein, dass ich zweimal hintereinander aus der Variablen $1 lesen muss.
    Das muss anders gehen.

    Aber heute bin ich dafuer zu erledigt. Nur 3std Schlaf fordern ihren Tribut.

    Danke erstmal bis hierhin.
    :)
     
  6. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Jo dann [^.] :)
     
  7. #7 angelsfall, 17.09.2007
    Zuletzt bearbeitet: 17.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Das matcht auch noch z.B. ?? oder !!. Warum nicht Buchstaben angeben, wenn er sie explizit (und nichts anderes) will? :)
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Code:
    s/(([a-z])\2)/($1)/g
    oder

    Code:
    s/([a-z])\1/($&)/g
     
  8. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Der is gut:
    Code:
    s/([a-z])\1/($&)/g
    Aber verstehen tu ich es immer noch nicht:

    Es wird in $1 eingelesen, und $& wird ausgegeben.

    Hmm...
    :think:

    Naja, ist mein 3. Tag mit Perl :D
     
  9. #9 angelsfall, 17.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    $& gibt den ganzen gematchten String zurück, $1 ... $n jeweils den Inhalt der Klammer.
    \1 ist eine Referenz auf die erste Klammer, also das [a-z]. Damit wird praktisch das Zeichen gedoppelt und es matcht eben auf alle doppelten Zeichen.
     
  10. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Ah, das bringt etwas Licht in die Sache.

    THX!
     
  11. #11 angelsfall, 18.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    fyi:

     
Thema: [perl] Doppelbuchstaben
Besucher kamen mit folgenden Suchen
  1. regexp doppelbuchstabe

Die Seite wird geladen...

[perl] Doppelbuchstaben - Ähnliche Themen

  1. [Perl] Perl OO Methodenaufruf in anderem Objekt

    [Perl] Perl OO Methodenaufruf in anderem Objekt: Hallo, Ich bin dabei in Perl ein Pokerspiel zu programmieren, hänge aber momentan an einem Problem, wo ich nicht weiterkomme. Ich habe die...
  2. [Perl] Check auf Referenz...Hash

    [Perl] Check auf Referenz...Hash: Hallo! Mal ne kleine Frage. Gibt es ein Funktion mit der ich checken kann, ob in einem Hash der Value eine Referenz auf einen weiter Hash...
  3. [Perl]: Mehr als ein Objekt auf einmal instanziieren

    [Perl]: Mehr als ein Objekt auf einmal instanziieren: Hallo zusammen, ich benutze zurzeit Net::FTPSSL zum Aufbau einer FTP Connection. Mein Problem ist, wenn ich z.B. eine Verbindung zu 5...
  4. [Perl] Script zum ändern der Signatur in vB-Boards

    [Perl] Script zum ändern der Signatur in vB-Boards: Hallo, folgendes Script funktioniert beim gulli:board , aber leider nicht hier: #!/usr/bin/perl use LWP::UserAgent; $agent = new...
  5. [Perl] Namespace Probleme

    [Perl] Namespace Probleme: Hallo zusammen, irgendwie scheitere ich gerade daran, meine sehr lange Hauptdatei in viele Module (*.pm) mit einem Steuerprogramm (.pl) zu...