Thread Regex mit optionaler Gruppe (3 answers)
Opened by pinwheel at 2015-07-13 17:14

Linuxer
 2015-07-13 21:50
#181567 #181567
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Naja, oder (als Alternative zu Raubtiers Vorschlag) Du überarbeitest Deine Gruppierungen und nutzt das ? entsprechend:

Vorschlag:
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;
use 5.010.000;

my $re = qr{
^(\d{9})                # save in $1
:\s                     # fixed string
(?:                     # group without saving
        .*?             # any string, as short as possible
        (H\d{9})        # save in $2
)?                      # the "not-saving" group is optional (for lines without matching the pattern for $2)
}x;

while ( my $line = <DATA> ) {

        if ( $line =~ $re ) {

                # print line numbers and matches
                printf "%d : \$1 = %s; \$2 = %s\n",
                        $., ( $1 // '' ), ( $2 // '' );
        }
}

__DATA__
410304100: 410304100 410304101
410304100: H410304100 410304101
410304100: 410304100 H410304101


Resultat:
Code: (dl )
1
2
3
1 : $1 = 410304100; $2 =
2 : $1 = 410304100; $2 = H410304100
3 : $1 = 410304100; $2 = H410304101
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Regex mit optionaler Gruppe