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


11

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

POSIX 사양의 9.3.5 섹션 에서 목록의 4 번 항목으로 정확한 기술적 정의를 찾았 지만 실제로 명확하지 않습니다.

나는 웹에서 예제와 설명을 찾아 보았고 완전히 빈손으로 나타나지는 않았지만 분명히 밝아 지지 않았습니다 .

내가 얻은 유일한 것은 특정 상황에서 정규 표현식이 길이를 비교하고 "가장 긴 일치"가 무엇인지 결정하기 위해 여러 문자를 단일 문자처럼 취급하도록 할 수 있다는 것입니다 (정규식이 욕심과 가능한 가장 긴 일치를 반환하십시오).

그래도 전부입니까? 나는 그것을 사용하는 데 어려움을 겪고 있지만 내 이해가 불완전하다고 생각합니다. 실제로 정규식에 대한 "소트"는 무엇입니까? 그리고 [[.ch.]]POSIX 사양의 예는 어떻게 이것과 관련이 있습니까?

답변:


7

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

많은 언어에서 데이터 정렬 (사전처럼 정렬)은 문자별로 수행되지 않습니다. 예를 들어, 체코 어에서는 영어 와 같이 ch정렬하지 않고 정렬 하기 위해 전체적으로 간주됩니다. 그것은 (우리가 여기에 문자를 참조 할 수 없습니다, 문자 조합 요소의 하위 집합) 사이에서 그 종류의 조합시 요소 와 .cgcihi

이제 정규식과 어떤 관련이 있습니까? , 왜 대괄호 표현식에서 조합 요소를 참조하고 싶습니까? .

글쎄, 괄호 안의 표현은 순서를 사용합니다. 예를 들어의에서 와 사이 [c-j]문자 를 원합니다 . 당신 은요? 오히려 거기에 조합 요소를 원할 것입니다. 체코 로케일의 경기에서 :cj[h-i]ch

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

따라서 대괄호 표현식에 여러 조합 요소를 나열 할 수 있으면 개별적으로 나열 할 수도 있습니다. [a-cch]그 사이에 그 조합 요소를 일치합니다 acch문자를. a-c그리고 chcollating 요소 를 가지려면 새로운 문법이 필요합니다 :

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

(사이에있는 것들 ac그리고 ch하나).

이제 세상은 아직 완벽하지 않으며 아마 결코 그렇지 않을 것입니다. 위의 예는 GNU 시스템에 있었고 작동했습니다. 조합 요소 의 또 다른 예는 eUTF-8의 결합 급성 악센트를 사용할 수 있습니다 ( $'e\u0301'처럼 렌더링 $'\u00e9'é).

é와 é는 하나의 문자로 표현되고 다른 하나는 2로 표현된다는 점을 제외하고 는 동일한 문자 입니다.

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

일부 시스템에서는 제대로 작동하지만 다른 시스템에서는 제대로 작동하지 않습니다 (예 : GNU 시스템 제외). 그리고 그것은 여부 불분명 $'[[.\ue9.]]'에만 일치해야 $'\ue9'또는 둘 모두 $'\ue9'$'e\u301'.

알파벳이 아닌 스크립트 또는 다른 지역별 정렬 순서를 가진 스크립트는 말할 것도없고 ffi, 간단한 API로 다루기가 까다로워지는 one ( 한 문자로) 와 같은 것들도 있습니다.


1

영어 이외의 문자가 아닌 문자를 사용하는 경우에 유용합니다. ch언급 한 예 는 digraph입니다 . 즉, 일부 언어에는 알파벳 문자가 있고 영어 알파벳 두 글자로 표시 할 수 있습니다.

[.ch.]정규 표현식에서 사용할 때 기본적으로 다음과 같이 말합니다. "digraph와 함께 영어가 아닌 입력 시퀀스가 ​​필요합니다 ch. 정규 표현식이 단일 charachter와 일치하기를 원합니다 ch. 프로그래밍 언어 / regex 엔진 / 키보드로 인해이 digraph를 작성할 수 없습니다. 부호를 입력 하고을 입력 합니다 . 그 뒤에 . [.ch.]c오는 것은 아닙니다 h. 단 하나의 문자만으로도 digraph의 발생을 찾으십시오. "

[[.ch.]]이 digraph는 문자 집합의 일부임을 의미합니다. 이 경우 실제로는 하나의 문자 만 있습니다. 표준 정규 표현식 표기법.


에서 스테판의 대답 것 같습니다 ch 입니다 실제로 두 개의 서로 다른 문자; 정렬 목적으로 하나만 취급됩니다. "digraph"가 적용 가능한 용어입니까?
와일드 카드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.