Hallo Siechfred,
$text =~ /(?<!\d)(100|\d{1,2})(?!\d)/;
Ich werde die Lookbehind-Konstrukte auch noch irgendwann kapieren :-/
So schwer ist das auch nicht:
(?<!TEXT) ist eine negative lookbehind assertion. Die sorgt dafür, dass _vor_ dem String, der gematcht wird, TEXT *nicht* vorkommen darf. Allerdings matcht (?<!TEXT) nicht auf TEXT, d.h. die Länge der Assertion ist 0 und TEXT ist somit *nicht* Teil des gesamten gematchten Strings.
/(?<!ASP) ist toll/ findet also die Zeichenkette " ist toll" sofern davor *nicht* "ASP" steht.
Das Gegenteil davon ist die lookbehind assertion:
/(?<=Perl) ist toll/ findet die Zeichenkette " ist toll" - aber nur dann, wenn "Perl" davorsteht.
Genauso gibt es lookahead assertions:
/Du bist (?!doof)/ findet die Zeichenkette "Du bist " sofern da *nicht* "doof" dahinter steht.
/Du bist (?=ein Freak)/ findet die Zeichenktte "Du bist " - aber nur dann, wenn "ein Freak" dahinter steht.
Diese Assertions können auch in anderen Situationen nützlich sein. Du willst bspw. jedes Wort finden, das fünf Buchstaben hat aber *nicht* Linux ist:
$text =~ /\b(?!Linux)(\w{5})\b/
(\b ist die Wortgrenze)
Viele Grüße,
Christian