정규식(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 , Lt 및
Lu .
|
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에서 유니코드 속성을 사용하지 않는 이유입니다.