正規表現 拡張正規表現とは ハット コマンド mac regex grep cjk

拡張正規表現とは - GNU grep regex `[一-十]`(de uno a diez) no coincide con el carácter chino 四(cuatro)



unix コマンド ハット (2)

Le pregunté esto en un foro chino, y alvin_rxg respondió con esto:

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

¡Así que sé que acabo de hacer una suposición tonta! grep no es tan inteligente. No se espera que la expresión regular [一 - 十] (de uno a diez) coincida con los números chinos. Simplemente coincide con cualquier carácter entre ''一'' (U + 4E00) y ''十'' (U + 5341). ¡Simplemente sucede que todos los números chinos están en ese rango excepto ''四'' (U + 56DB)!

Sin embargo, esto se puede usar como una broma fría. ;-)

Este comando

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

productos:

一 二 三 五 六 七 八 九 十

Se espera que la expresión regular [一-十] (de uno a diez) coincida con los números chinos. Como muestra el ejemplo, coincide con cada número chino del uno al diez, excepto el carácter chino (cuatro).

¿Por qué?

¿Es esto un error o una broma?

Puedo pensar que esto es una broma, porque en chino ''四'' (cuatro) suena igual a ''事'' (cosa). De hecho, en algunos dialectos de chino, comparten la misma pronunciación. Así ''一 二三 五六七 (('' (uno dos tres cinco seis siete ocho nueve diez) implica ''沒 四'' (no cuatro), es decir, ''沒事'' (nada).

Por cierto, la versión de grep que uso:

GNU grep 2.5.4


Los números chinos no están en orden en Unicode. Eso 四 es U + 56DB, mientras que 一 es U + 4E00, y 10 es 5341. Entonces el 4 no encaja.

Lea el estándar Unicode para obtener más información, y vea http://www.unicode.org/charts/PDF/U4E00.pdf .