정규식(PCRE) PCRE Patterns Unicode character properties

5.1.0부터 UTF-8 mode를 선택하면 일반 문자 유형과 일치하는 세 가지 추가 이스케이프 시퀀스를 사용할 수 있습니다. 그들은:

\p{xx}
xx 속성을 가진 문자
\P{xx}
xx 속성이 없는 문자
\X
확장된 유니코드 시퀀스

위의 xx로 표시된 속성 이름은 유니코드 일반 범주 속성으로 제한됩니다. 각 문자에는 정확히 하나의 속성이 있으며 두 글자로 된 약어로 지정됩니다. Perl과의 호환성을 위해 여는 중괄호와 속성 이름 사이에 곡절을 포함하여 부정을 지정할 수 있습니다. 예를 들어, \p{^Lu}\P{Lu}와 같습니다.

\p 또는 \P로 하나의 문자만 지정하면 해당 문자로 시작하는 모든 속성이 포함됩니다. 이 경우 부정이 없으면 이스케이프 시퀀스의 중괄호는 선택 사항입니다. 이 두 예는 동일한 효과를 가집니다.

\p{L}
\pL
                

지원되는 속성 코드

Property Matches Notes
C Other  
Cc Control  
Cf Format  
Cn Unassigned  
Co Private use  
Cs Surrogate  
L Letter 다음 속성을 포함합니다.: Ll, Lm, Lo, LtLu.
Ll Lower case letter  
Lm Modifier letter  
Lo Other letter  
Lt Title case letter  
Lu Upper case letter  
M Mark  
Mc Spacing mark  
Me Enclosing mark  
Mn Non-spacing mark  
N Number  
Nd Decimal number  
Nl Letter number  
No Other number  
P Punctuation  
Pc Connector punctuation  
Pd Dash punctuation  
Pe Close punctuation  
Pf Final punctuation  
Pi Initial punctuation  
Po Other punctuation  
Ps Open punctuation  
S Symbol  
Sc Currency symbol  
Sk Modifier symbol  
Sm Mathematical symbol  
So Other symbol  
Z Separator  
Zl Line separator  
Zp Paragraph separator  
Zs Space separator  

InMusicalSymbols와 같은 확장 속성은 PCRE에서 지원되지 않습니다.

대소문자를 구분하지 않는(대소문자 없는) 일치를 지정해도 이러한 이스케이프 시퀀스에는 영향을 주지 않습니다. 예를 들어 \p{Lu}는 항상 대문자와만 일치합니다.

유니코드 문자 집합은 특정 스크립트에 속하는 것으로 정의됩니다. 이러한 세트 중 하나의 문자는 스크립트 이름을 사용하여 일치시킬 수 있습니다. 예를 들어:

  • \p{Greek}
  • \P{Han}

식별된 스크립트의 일부가 아닌 것은 Common으로 함께 묶입니다. 현재 스크립트 목록은 다음과 같습니다.

지원되는 스크립트

Arabic Armenian Avestan Balinese Bamum
Batak Bengali Bopomofo Brahmi Braille
Buginese Buhid Canadian_Aboriginal Carian Chakma
Cham Cherokee Common Coptic Cuneiform
Cypriot Cyrillic Deseret Devanagari Egyptian_Hieroglyphs
Ethiopic Georgian Glagolitic Gothic Greek
Gujarati Gurmukhi Han Hangul Hanunoo
Hebrew Hiragana Imperial_Aramaic Inherited Inscriptional_Pahlavi
Inscriptional_Parthian Javanese Kaithi Kannada Katakana
Kayah_Li Kharoshthi Khmer Lao Latin
Lepcha Limbu Linear_B Lisu Lycian
Lydian Malayalam Mandaic Meetei_Mayek Meroitic_Cursive
Meroitic_Hieroglyphs Miao Mongolian Myanmar New_Tai_Lue
Nko Ogham Old_Italic Old_Persian Old_South_Arabian
Old_Turkic Ol_Chiki Oriya Osmanya Phags_Pa
Phoenician Rejang Runic Samaritan Saurashtra
Sharada Shavian Sinhala Sora_Sompeng Sundanese
Syloti_Nagri Syriac Tagalog Tagbanwa Tai_Le
Tai_Tham Tai_Viet Takri Tamil Telugu
Thaana Thai Tibetan Tifinagh Ugaritic
Vai Yi        

\X 이스케이프는 유니코드 확장 자소 클러스터와 일치합니다. 확장된 자소 클러스터는 단일 글리프를 형성하기 위해 결합되는 하나 이상의 유니코드 문자입니다. 실제로 이것은 .의 유니코드에 해당하는 것으로 생각할 수 있습니다. 얼마나 많은 개별 문자가 실제로 렌더링에 사용되는지에 관계없이 구성된 하나의 문자와 일치하기 때문입니다.

8.32 이전의 PCRE 버전(번들된 PCRE 라이브러리를 사용할 때 5.4.14 이전의 PHP 버전에 해당)에서 \X(?>\PM\pM*)과 동일합니다. 즉, "mark" 속성이 없는 문자와 "mark" 속성이 있는 0개 이상의 문자와 일치하고 시퀀스를 원자 그룹으로 처리합니다(아래 참조). "mark" 속성이 있는 문자는 일반적으로 선행 문자에 영향을 주는 악센트입니다.

PCRE는 15,000자 이상의 데이터가 포함된 구조를 검색해야 하기 때문에 유니코드 속성으로 문자를 일치시키는 것은 빠르지 않습니다. 이것이 \d\w와 같은 기존 이스케이프 시퀀스가 ​​PCRE에서 유니코드 속성을 사용하지 않는 이유입니다.