정규식(PCRE) PCRE Patterns Character classes

여는 대괄호는 닫는 대괄호로 끝나는 문자 클래스를 소개합니다. 닫는 대괄호 자체는 특별하지 않습니다. 닫는 대괄호가 클래스의 구성원으로 필요한 경우 클래스의 첫 번째 데이터 문자(있는 경우 초기 곡절 뒤)이거나 백슬래시로 이스케이프되어야 합니다.

문자 클래스는 주제의 단일 문자와 일치합니다. 문자는 클래스에서 정의한 문자 집합에 있어야 합니다. 단, 클래스의 첫 번째 문자가 곡절 부호인 경우에는 주제 문자가 클래스에서 정의된 집합에 없어야 합니다. 곡절이 실제로 클래스의 구성원으로 필요한 경우 첫 번째 문자가 아닌지 확인하거나 백슬래시로 이스케이프하십시오.

예를 들어, 문자 클래스 [aeiou]는 소문자 모음과 일치하는 반면 [^aeiou]는 소문자 모음이 아닌 모든 문자와 일치합니다. 곡절은 클래스에 없는 문자를 열거하여 클래스에 있는 문자를 지정하기 위한 편리한 표기법일 뿐입니다. 어설션이 아닙니다. 여전히 주제 문자열의 문자를 사용하고 현재 포인터가 문자열 끝에 있으면 실패합니다.

대소문자를 구분하지 않는(대소문자 없는) 일치가 설정되면 클래스의 모든 문자는 대문자와 소문자 버전을 모두 나타내므로 예를 들어 구분하지 않는 [aeiou]는 "A"와 "a"와 일치하고 구분하지 않는 [ ^aeiou]는 "A"와 일치하지 않지만 민감한(대소문자 구분) 버전은 일치합니다.

개행 문자는 PCRE_DOTALL 또는 PCRE_MULTILINE 옵션의 설정에 관계없이 문자 클래스에서 특별한 방식으로 처리되지 않습니다. [^a]와 같은 클래스는 항상 개행과 일치합니다.

빼기(하이픈) 문자를 사용하여 문자 클래스의 문자 범위를 지정할 수 있습니다. 예를 들어, [d-m]은 d와 m(포함) 사이의 모든 문자와 일치합니다. 클래스에 빼기 문자가 필요한 경우 백슬래시로 이스케이프 처리하거나 일반적으로 클래스의 첫 번째 또는 마지막 문자로 범위를 나타내는 것으로 해석할 수 없는 위치에 나타나야 합니다.

범위의 끝 문자로 리터럴 문자 "]"를 사용할 수 없습니다. [W-]46]과 같은 패턴은 리터럴 문자열 "46]"이 뒤따르는 두 문자("W" 및 "-")의 클래스로 해석되므로 "W46]" 또는 "-46]과 일치합니다. ". 그러나 "]"가 백슬래시로 이스케이프되면 범위의 끝으로 해석되므로 [W-\]46]은 두 개의 개별 문자가 뒤에 오는 범위를 포함하는 단일 클래스로 해석됩니다. "]"의 8진수 또는 16진수 표현을 사용하여 범위를 끝낼 수도 있습니다.

범위는 ASCII 조합 순서로 작동합니다. 숫자로 지정된 문자(예: [\000-\037])에도 사용할 수 있습니다. 대소문자를 구분하지 않는(대소문자 없는) 일치가 설정된 경우 문자를 포함하는 범위를 사용하면 두 경우 모두 문자와 일치합니다. 예를 들어, [W-c]는 [][\^_`wxyzabc]와 동일하며 대소문자를 구분하지 않고 일치하며 "fr" 로케일에 대한 문자 테이블이 사용 중인 경우 [\xc8-\xcb]는 다음에서 악센트가 있는 E 문자와 일치합니다. 두 경우 모두.

문자 유형 \d, \D, \s, \S, \w 및 \W도 문자 클래스에 나타날 수 있으며 일치하는 문자를 클래스에 추가할 수 있습니다. 예를 들어, [\dABCDEF]는 모든 16진수와 일치합니다. 곡절은 대문자 유형과 함께 편리하게 사용하여 일치하는 소문자 유형보다 더 제한된 문자 세트를 지정할 수 있습니다. 예를 들어 [^\W_] 클래스는 모든 문자 또는 숫자와 일치하지만 밑줄은 일치하지 않습니다.

\, -, ^(시작 부분) 및 종료 ]를 제외한 모든 영숫자가 아닌 문자는 문자 클래스에서 특수하지 않지만 이스케이프 처리해도 해가 되지 않습니다. 패턴 종결자는 항상 특수하며 표현식 내에서 사용될 때 이스케이프되어야 합니다.

Perl은 문자 클래스에 대한 POSIX 표기법을 지원합니다. 이것은 둘러싸는 대괄호 내에서 [::]로 묶인 이름을 사용합니다. PCRE는 이 표기법도 지원합니다. 예를 들어, [01[:alpha:]%]는 "0", "1", 모든 알파벳 문자 또는 "%"와 일치합니다. 지원되는 클래스 이름은 다음과 같습니다.

캐릭터 클래스

alnumletters and digits
alphaletters
asciicharacter codes 0 - 127
blankspace or tab only
cntrlcontrol characters
digitdecimal digits (same as \d)
graphprinting characters, excluding space
lowerlower case letters
printprinting characters, including space
punctprinting characters, excluding letters and digits
spacewhite space (not quite the same as \s)
upperupper case letters
word"word" characters (same as \w)
xdigithexadecimal digits

space 문자는 HT(9), LF(10), VT(11), FF(12), CR(13) 및 공백(32)입니다. 이 목록에는 VT 문자(코드 11)가 포함되어 있습니다. 이것은 VT를 포함하지 않는 \s와 "공백"을 다르게 만듭니다(Perl 호환성을 위해).

이름 word는 Perl 확장이고 blank은 Perl 5.8의 GNU 확장입니다. 또 다른 Perl 확장은 콜론 뒤에 ^ 문자로 표시되는 부정입니다. 예를 들어, [12[:^digit:]]는 "1", "2" 또는 숫자가 아닌 모든 것과 일치합니다.

UTF-8 모드에서 값이 128보다 큰 문자는 POSIX 문자 클래스와 일치하지 않습니다. libpcre 8.10부터 일부 문자 클래스는 유니코드 문자 속성을 사용하도록 변경되었으며, 이 경우 언급된 제한 사항이 적용되지 않습니다. 자세한 내용은 » PCRE(3) manual를 참조하세요.

유니코드 문자 속성은 문자 클래스 안에 나타날 수 있습니다. 범위의 일부가 될 수 없습니다. 유니코드 문자 클래스 뒤의 빼기(하이픈) 문자는 문자 그대로 일치합니다. 유니코드 문자 속성으로 범위를 끝내려고 하면 경고가 발생합니다.