Thread Conditional RegExp (8 answers)
Opened by PHilbs at 2010-02-20 20:44

Gast PHilbs
 2010-02-20 22:49
#133392 #133392
Hallo murphy,

danke für deine Antwort. Ich habe es so wie vorgeschlagen gelöst, indem ich für die einzelnen Tiere Subausdrücke erstellt habe:

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
#!/usr/bin/perl

use strict;
use warnings;

my $pattern = qr/^((?<k>katze)|(?<h>hund)):(?<n>[^,]+),(?(<h>)(?<g>\d+),)(?<x>w|m)/;

blub("hund:waldi,23,m");
blub("katze:rosa,w");

sub blub {
    my $string = shift;
    print "-"x20;
    print "\nString:\t\t$string\n";
    if ($string =~ $pattern) {
        print "Tier:\t\t";
        if (defined($+{k})) {
            print "$+{k}\n";
        } elsif (defined($+{h})) {
            print "$+{h}\n";
        }
        print "Name:\t\t$+{n}\n" if (defined($+{n}));
        print "Gewicht:\t$+{g}kg\n" if (defined($+{g}));
        print "Geschlecht:\t$+{x}\n" if (defined($+{x}));
    } else {
        print "no matches...\n";
    }
}


Ich bekomme folgende Ausgabe und denke somit, dass nun alles so klappt, wie es soll:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
$ ./test.pl
--------------------
String: hund:waldi,23,m
Tier: hund
Name: waldi
Gewicht: 23kg
Geschlecht: m
--------------------
String: katze:rosa,w
Tier: katze
Name: rosa
Geschlecht: w

View full thread Conditional RegExp