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
zu1
(das ist0
oder1
) oder Spiel a0
.
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.