[perl] Doppelbuchstaben

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von buli, 17.09.2007.

  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. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #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.
     
  4. #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!
    :)
     
  5. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Probier mal:
    Code:
    s/(.)\1/($&)/g;
     
  6. #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.
    :)
     
  7. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Jo dann [^.] :)
     
  8. #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
     
  9. 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
     
  10. #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.
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. 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!
     
  13. #11 angelsfall, 18.09.2007
    angelsfall

    angelsfall Routinier

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

     
Thema:

[perl] Doppelbuchstaben

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...