Wenn die Leerzeichen nicht im String vorkommen, lass sie aus der Regex raus.
if ($string =~ /^KG\d{3}[JMA]$/) {
}
\d{3} steht für drei aufeinanderfolgende Zeichen der Klasse "digit"; digit steht für die Ziffern 0 bis 9.
Wenn die drei Zeichen, die auf den String "KG" folgen, keine drei Ziffern sind, dann ergibt der Regex keinen Treffer.
Es gibt auch ein Perl-Modul, mit dem man sich Regex erklären lassen kann:
YAPE::Regex::Explain
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
host:prompt> perl -MYape::Regex::Explain -le " my $p = YAPE::Regex::Explain->new(qr{^KG\d{3}[JMA]$}); print $p->explain();"
The regular expression:
(?-imsx:^KG\d{3}[JMA]$)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
^ the beginning of the string
----------------------------------------------------------------------
KG 'KG'
----------------------------------------------------------------------
\d{3} digits (0-9) (3 times)
----------------------------------------------------------------------
[JMA] any character of: 'J', 'M', 'A'
----------------------------------------------------------------------
$ before an optional \n, and the end of the
string
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
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!