/ / Perl wyrażenie regularne pasujące do liczb - regex, perl

Wyrażenie regularne Perla, aby dopasować dane liczbowe - regex, perl

Musisz dopasować BSC0 do BSC10 i „TOTAL”. Ale poniższy warunek odpowiada tylko BSC1 i BSC10. Czego brakuje? próbowałem z s/regex/ m/regex/ wariacje również

$currentRowHeader będzie zawierać pojedyncze słowo bez spacji

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

Odpowiedzi:

8 dla odpowiedzi № 1

[...] jest postać klasa. Może pasować tylko do jednej postaci. Wyrażenia regularne nie mają pojęć liczbowych - tylko znaki cyfrowe. To, co mówi twoje wyrażenie regularne

Dopasuj postać z 0 do 1 (to jest 0 lub 1) lub dopasuj a 0.

Więc pasuje tylko do jednej cyfry binarnej. Możesz użyć

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

Zauważ, że ?: nie jest konieczne, ale jest dobrym nawykiem, ponieważ tłumi niepotrzebne przechwytywanie a zatem przyspiesza operację.


2 dla odpowiedzi nr 2

Myślnik w klasie postaci to zakres postacie, nie wartości. Spróbuj tego:

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

FYI d oznacza „dowolną cyfrę” i jest identyczny (ze znakami łacińskimi) z kodowaniem [0-9], ale krótszy i łatwiejszy do odczytania.

Jak powiedzą ci niektórzy pedanci, d zawiera liczby niełacińskie, takie jak arabskie i chińskie symbole liczb, ale jest to wyraźnie nieistotne w kontekście tego pytania.