2012-09-29 13 views
6

to polecenieGNU grep regex `[一 - 十]` (jedna dziesiąta) nie zgadza się z chińskich znaków 四 (cztery)

$ echo '一二三四五六七八九十' | grep -oE '[一-十]' 

wyjścia:

一 
二 
三 
五 
六 
七 
八 
九 
十 

regex [一-十] (jeden do dziesięciu) ma się równać z chińskimi liczbami. Jak pokazuje przykład, pasuje do każdej chińskiej liczby od jednego do dziesięciu, z wyjątkiem chińskiego znaku (cztery) .

Dlaczego?

Czy to błąd, czy żart?

Mogę myśleć, że to żart, ponieważ po chińsku "四" (cztery) brzmi podobnie "事" (rzecz). W rzeczywistości w niektórych dialektach języka chińskiego mają tę samą wymowę. Tak więc "一 二三 五六七 八 九十" (jeden dwa trzy pięć sześć siedem osiem dziewięć dziesięć) implikuje "沒 四" (nie cztery), tj. "沒事" (nie ma rzeczy)

BTW, wersja grep używam:

GNU grep 2.5.4 

Odpowiedz

7

Chińskie numery nie są w porządku w Unicode. To 四 to U + 56DB, podczas gdy 一 to U + 4E00, a 10 to 5341. Tak więc 4 nie pasuje.

Przeczytaj standard Unicode, aby uzyskać więcej informacji i zobacz http://www.unicode.org/charts/PDF/U4E00.pdf.

+0

Dziękujemy za szybką odpowiedź. Howerver, używam "-" (ascii, nie chińskie znaki) zamiast "一". Więc pasuje do zakresu. Czy możesz edytować swoją odpowiedź? Wtedy mogę to zaakceptować. – weakish

+0

@ Brzydkie brzydoty mówią o pierwszej postaci twojego zakresu, a nie o kresce między punktami końcowymi. – lanzz

+0

@lanzz Dziękuję za wskazanie mojego błędu. "一" i "-" wyglądają podobnie. Powinienem był zauważyć "U + 4E00". – weakish

2

poprosiłem to na chińskim forum i alvin_rxg odpowiada z tym:

一 => U+4E00 
十 => U+5341 
四 => U+56DB 

Więc znany Zrobiłem głupią założenie! grep nie jest tak inteligentny. Wyrażenie regularne [一 - 十] (od jednego do dziesięciu) to , a nie oczekiwane dopasowanie do chińskich liczb. Po prostu pasuje do dowolnych znaków między "一" (U + 4E00) i "十" (U + 5341). Po prostu wszystkie numery chińskie znajdują się w tym zakresie, z wyjątkiem "四" (U + 56DB)!

Może to jednak służyć jako zimny żart. ;-)

Powiązane problemy