정규식에서 [[.ch.]]는 무엇을 의미합니까?

정규식에서 [[.ch.]]는 무엇을 의미합니까?

대체 제목: POSIX 호환 정규식에서 "조합 시퀀스" 또는 "조합 요소"란 무엇입니까?

정확한 기술적 정의를 찾았습니다.POSIX 사양 섹션 9.3.5, 목록의 항목 4에 해당하지만 확실하지 않습니다.

예와 설명을 온라인에서 검색했지만 아무것도 찾지 못했습니다.완전히빈손으로 돌아오지만 절대 그렇지 않아요밝은.

내가 얻은 유일한 것은 어떤 경우에는 정규식이 여러 문자를 단일 문자로 처리하여 길이 비교를 수행하고 "가장 긴 일치"가 무엇인지 결정할 수 있다는 것입니다(정규식은 탐욕스럽고 가능한 가장 긴 일치를 반환하기 때문에).

하지만 그게 전부인가요? 사용법을 이해하는 데 어려움을 겪고 있지만 이해가 불완전한 것 같습니다. 정규식 "마샬링"은 실제로 무엇을 의미합니까?[[.ch.]]POSIX 사양의 예는 이와 어떤 관련이 있나요?

답변1

데이터 정렬 요소는 일반적으로 데이터 정렬 컨텍스트 내에서 참조됩니다.

많은 언어에서 대조(사전처럼 정렬)는 단지 문자별로 발생하지 않습니다. 예를 들어 체코어에서는 ch영어에서와 같이 와 사이를 정렬하지 않고 전체적으로 정렬합니다 cg. ci이는 정렬 요소입니다(여기에서는 문자를 인용할 수 없으며 문자는 정렬 요소의 하위 집합입니다). h및 사이에 정렬됩니다 i.

이제 당신은 이렇게 물을 수 있습니다.이것이 정규 표현식과 어떤 관련이 있나요?,대괄호 표현식에서 데이터 정렬 요소를 참조하려는 이유는 무엇입니까?.

음, 대괄호 표현식에서는 실제로 순서가 사용됩니다. 예를 들어 [c-j],수치c와 ~ 사이에있는 j. 당신은 어떤가요? 차라리 거기에 요소를 정리하는 것이 좋습니다. [h-i]체코어로 일치하는 항목 ch:

$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho

따라서 대괄호 표현식에 일련의 조합 요소를 나열할 수 있는 경우 해당 요소를 개별적으로 나열할 수도 있습니다. [a-cch]및 및 및 문자 사이의 조합 요소를 일치시킵니다 . 요소를 조합하려면 새로운 구문이 필요합니다.accha-cch

$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho

( a그리고 c그 사이의 것 ch).

이제 세상은 완벽하지 않으며 결코 완벽하지 않을 수도 있습니다. 위의 예는 GNU 시스템에서 실행되었습니다. 또 다른 예는요소 구성eUTF-8의 날카로운 악센트와 결합 될 수 있습니다( 로 $'e\u0301'렌더링됨 ).$'\u00e9'é

é와 é는 같다특징하나는 하나의 문자로 표시되고 다른 하나는 두 개의 문자로 표시됩니다.

$ echo $'e\u301t\ue9' | grep '^[d-f]t'

이는 일부 시스템에서는 제대로 작동하지만 다른 시스템(예: GNU 시스템)에서는 작동하지 않습니다. 그리고 $'[[.\ue9.]]'그것이 오직 및 또는 둘 다와 일치해야 하는지 는 확실하지 않습니다 $'\ue9'.$'\ue9'$'e\u301'

알파벳이 아닌 스크립트나 로케일이 다른 스크립트, ffi( ffi한 문자)와 같은 정렬 순서는 말할 것도 없고 이러한 간단한 API로 처리하기 까다로울 수 있습니다.

답변2

이는 영어가 아닌(ASCII가 아닌) 문자로 작업할 때 유용합니다. 당신이 언급한 예 ch유향 그래프즉, 일부 언어의 알파벳 한 글자는 영어 알파벳 두 글자로 표현될 수 있습니다.

정규식에서 사용 하면 [.ch.]기본적으로 다음과 같이 말합니다. "digraphs가 포함된 영어가 아닌 입력 시퀀스가 ​​필요합니다 ch. 정규식이 단일 문자와 일치하기를 원합니다 ch. 내 프로그래밍 언어/정규식 엔진/키보드에서 허용되지 않습니다. 이 두문자 기호를 쓰려면 내가 입력한 내용 뒤에 "단일 문자로 나타나는 이중문자만 찾아주세요."가 나오지 [.ch.]않습니다 .ch

[[.ch.]]이중문자가 문자 집합의 일부임을 나타냅니다. 이 경우에는 실제로 문자가 하나만 있습니다. 표준 정규식 표기법입니다.

관련 정보