grep [0-9]
같은 방식으로 작동 할까요 grep [:digit:]
?
답변1
[0-9]
아니아니요와 동일합니다 [:digit:]
.
[0-9]
0부터 9까지의 숫자와 일치합니다.
[:digit:]
0~9 및 비서구 언어(예: 동부 아랍어)의 숫자와 일치합니다.
답변2
[[:digit:]]
내부의 설명을 변경할 수 있습니다 [0-9]
. 이는 입력 인코딩에 따라 다릅니다. ASCII라면 문제가 없을 것 같습니다. 다른 인코딩의 경우 숫자가 연속되지 않거나 바이트 범위가 다를 수 있습니다. 다른 쓰기 시스템에서는 특수 숫자가 누락될 수도 있습니다.[:digit:]
[…]
답변3
정확하게 말하면 다음과 같은 경우 [0-9]
에만 동일하다는 것이 보장됩니다 [:digit:]
.
정규식 구문 분석기는 이를 지원합니다
[:digit:]
(즉, 그렇지 않은 경우 기존 구문 분석기는[:digit:]
아마도 여러분이 생각하는 대로 수행하지 않을 것입니다). 그리고:입력 문자 집합은 ASCII와 같은 문자 집합으로, 숫자만 문자
0
이고9
서로 인접해 있습니다. (예를 들어) 유니코드(숫자가 숫자0
이외의 문자를 포함할 수 있는 경우9
) 또는 다른 8비트 문자 집합에서도 인접하지 않을 수 있습니다0
(9
EBCDIC숫자0
-9
인접).
유니코드 예외를 보여주는 예여기. 보시다시피, "숫자, 숫자, 소수" 범주의 유니코드 문자 세트에는 [0-9]
10개의 ASCII 숫자와 일치하는 것 이상이 포함되어 있습니다. 여기에는 아랍어, 인도인, 확장 아랍어, NGO 등이 포함됩니다.
유니코드 숫자에 대한 자세한 내용은 다음을 참조하세요.여기.
답변4
'[:숫자:]'예이론적으로클러스터 번호를 함께 설정하기 위해 로컬 문자 집합에 의존하지 않는다는 장점이 있어 이식성이 더 뛰어납니다.
관련 예: "[:upper:]"와 "[AZ]" 사이에는 ASCII의 차이가 없지만예기존 IBM과의 차이점EBCDIC여기서 "[AZ]"는 26자(EBCDIC 코드 193-233) 대신 41자로 확장되므로 EBCDIC "}\" 등과 일치합니다.