Thread Nur einen Buchstaben in Buchstabenkombination ersetzen (15 answers)
Opened by Gast at 2012-11-17 17:22

FIFO
 2012-11-17 22:44
#163357 #163357
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Mal als Ansatz, die Mustergenerierung ist der Übersicht halber in eine sub ausgelagert.
Es findet keinerlei Prüfung der Benutzereingaben statt, d.h. die Regel muss das Format <ersetze_was>/<ersetze_durch>/<Muster> haben.
Das Muster muss die einfache Struktur mit einem Unterstrich als Platzhalter haben.
Wenn Du das Prinzip verstanden hast, sind Erweiterungen für Dich schaffbar ;)
edit: Diese simple Variante hat ihre Tücken, so darf innerhalb der Regeln und Kategorien kein sog. Metazeichen stehen (z.B. ) oder *). Für weitergehende Experimente müsstest Du Dich mit quotemeta(), qr() und Konsorten beschäftigen.
Ein gutes Regex-Tutorial (Englisch) gibt es z.B. hier.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use warnings;
use strict;

$| = 1;

my @categories = (
    'V=aeiou',
    'P=pbtdkg'
);

while (1) {
    print "Text: ";
    my $text = <STDIN>;
    chomp($text);
    last if ! $text;    # Leere Eingabe beendet Schleife

    print "Regel: ";
    my $rule = <STDIN>;
    chomp($rule);

    last if ! $rule;

    my ($search, $replace) = build_regex($rule);

    $text =~ s/$search/$replace/g;

    print "\nMuster: $search\n\nNach Ersetzung: $text\n\n";
}

sub build_regex {   # build_regex($rule);
    my ($to_replace, $replace_with, $pattern) = split('/', $_[0]);

    for my $category (@categories) {
        my ($type, $class) = split('=', $category);

        $pattern =~ s/$type/[$class]/g;
    }

    $pattern =~ s/(.+)_/(?<=$1)_/;
    $pattern =~ s/_(.+)/_(?=$1)/;
    $pattern =~ s/_/$to_replace/;    # <--- edit

    return ($pattern, $replace_with);
}
__END__


Beispieldurchlauf:
Code: (dl )
1
2
3
4
5
6
Text: akrta
Regel: k/g/V_rP

Muster: (?<=[aeiou])k(?=r[pbtdkg])

Nach Ersetzung: agrta


Editiert von FIFO: $pattern-Bearbeitung korrigiert
Last edited: 2012-11-18 10:23:34 +0100 (CET)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread Nur einen Buchstaben in Buchstabenkombination ersetzen