/ / Perl regulärer Ausdruck zur Übereinstimmung mit Zahlen - Regex, Perl

Perl regulärer Ausdruck, um Zahlen zu entsprechen - Regex, Perl

BSC0 muss mit BSC10 und "TOTAL" übereinstimmen. Die folgende Bedingung stimmt jedoch nur mit BSC1 und BSC10 überein. Was fehlt? versucht mit s/regex/ m/regex/ Variationen auch

$currentRowHeader wird ein einzelnes Wort ohne Leerzeichen enthalten

if ($currentRowHeader =~ /BSC[0-10]|TOTAL/) { print "OK"}

Antworten:

8 für die Antwort № 1

[...] ist ein Charakter Klasse. Es kann nur ein einzelnes Zeichen gefunden werden. Reguläre Ausdrücke haben keine Konzepte von Zahlen - nur von Ziffern. Was Ihr Regex sagt, ist

Finde einen Charakter aus 0 zu 1 (das ist 0 oder 1) oder Spiel a 0.

Es stimmt also nur mit einer Binärziffer überein. Du könntest benutzen

if ($currentRowHeader =~ /BSC(?:[0-9]|10)|TOTAL/) { print "OK" }

Notiere dass der ?: ist nicht notwendig, aber eine gute Angewohnheit, da es unnötig unterdrückt Erfassen und beschleunigt damit den Betrieb.


2 für die Antwort № 2

Der Bindestrich in einer Zeichenklasse ist ein Bereich von Figurennicht Werte. Versuche dies:

if ($currentRowHeader =~ /BSC(10|d)|TOTAL/)

FYI d bedeutet "eine beliebige Ziffer" und ist identisch (mit lateinischen Zeichen) mit der Kodierung [0-9], aber kürzer und leichter zu lesen.

Wie einige Pedanten Ihnen sagen werden, d schließt nicht-lateinische Zahlen wie arabische und chinesische Symbole für Zahlen ein, aber das ist im Kontext dieser Frage eindeutig irrelevant.