Regular Expressions
문자 클래스
수색…
비고
간단한 수업
정규식 | 성냥 |
---|---|
[abc] | 다음 문자 중 하나 : a , b 또는 c |
[az] | 어떠한 문자 에 a z 포괄적 (이 범위라고 함) |
[0-9] | 에서 모든 숫자 0 에 9 (포함) |
공통 수업
문자의 일부 그룹 / 범위는 자주 사용되며 특수 약어가 있습니다.
정규식 | 성냥 |
---|---|
\w | 영숫자와 밑줄 ( "단어 문자"라고도 함) |
\W | 단어가 아닌 문자 ( [^\w] 와 동일) |
\d | 숫자 (페르시아 숫자, 인도 문자 등을 포함하여 [0-9] 보다 큼) |
\D | 페르시아 숫자, 인도식 문자를 거부 한 이후 [^0-9] 보다 짧은 자릿수가 아닌 자릿수 |
\s | 공백 문자 (공백, 탭 등) 참고 : 엔진 / 컨텍스트에 따라 다를 수 있습니다. |
\S | 비 공백 문자 |
수업 거부
여는 대괄호 뒤에있는 캐럿 (^) 은 그 뒤에 오는 문자의 부정으로 작동합니다. 이것은 문자 클래스에없는 모든 문자와 일치합니다.
제외 된 문자 클래스도 줄 바꿈 문자와 일치하므로 일치하지 않으면 특정 줄 바꿈 문자를 클래스 (\ r 및 / 또는 \ n)에 추가해야합니다.
정규식 | 성냥 |
---|---|
[^AB] | 이외의 모든 문자 및 A B |
[^\d] | 숫자를 제외한 모든 문자 |
기본 사항
Team A
, Team B
, ..., Team Z
라는 팀 목록이 있다고 가정 해 보겠습니다. 그때:
-
Team [AB]
:Team A
또는Team B
중 하나와 일치합니다. -
Team [^AB]
:Team A
또는Team B
제외한 모든 팀과 일치합니다.
우리는 종종 어떤 문맥이나 다른 문맥 ( A
부터 Z
까지 A
글자와 같은)에서 "속한"문자들을 일치시킬 필요가 있으며, 이것은 문자 클래스가 사용하는 것입니다.
서로 다른 유사 단어 일치
문자 클래스 [aeiou]
생각해보십시오. 이 문자 클래스는 정규 표현식에서 유사한 철자 단어 세트를 일치시키는 데 사용될 수 있습니다.
b[aeiou]t
일치 :
- 박쥐
- 내기
- 비트
- 봇
- 그러나
일치하지 않는 항목 :
- 합
- BT
- bt
문자 클래스는 한 번에 한 문자 씩만 일치합니다.
영숫자가 아닌 문자 일치 (부정 문자 클래스)
[^0-9a-zA-Z]
이것은 숫자 나 문자가 아닌 모든 문자 (영숫자)와 일치합니다. 밑줄 문자 _
도 무효화되면 식은 다음과 같이 짧아 질 수 있습니다.
[^\w]
또는:
\W
다음 문장에서 :
어때 잘 지내?
나는 2017 년을 기다릴 수 없다!
다음 문자가 일치합니다.
,
,,
'
?
끝 문자.
'
,,
!
끝 문자.
유니 코드 참고
유니 코드 문자 속성을 지원하는 일부 맛은 다른 유니 코드 문자를 의미하는 [\p{L}\p{N}_]
및 [^\p{L}\p{N}_]
로 \w
및 \W
를 해석 할 수 있습니다 숫자도 포함됩니다 ( PCRE 문서 참조). 다음은 PCRE \w
테스트입니다 .
.NET에서, \w
= [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}]
PCRE와 달리 \p{Nl}
과 \p{No}
와는 일치하지 않음을주의하십시오 ( \w
.NET 문서 참조 ).
어떤 이유로 든 유니 코드 3.1 소문자 (예 : 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚
)가 일치하지 않습니다.
Java의 (?U)\w
는 PCRE와 .NET에서 일치하는 \w
의 조합과 일치합니다.
비 숫자 매칭 (부정 문자 클래스)
[^0-9]
이것은 ASCII 숫자가 아닌 모든 문자와 일치합니다.
유니 코드 숫자도 부정되는 경우, 다음 표현식을 사용할 수 있습니다.
[^\d]
다음과 같이 단축 할 수 있습니다.
\D
u
수정자를 사용하여 명시 적으로 또는 일부 언어에서 프로그래밍 방식으로 유니 코드 문자 속성 지원을 활성화해야 할 수도 있지만 이는 명백하지 않을 수 있습니다. 인 텐트를 명시 적으로 전달하기 위해 다음 구조를 사용할 수 있습니다 (지원이 사용 가능한 경우).
\P{N}
어떤 정의에 의미 : 모든 스크립트에서 숫자 문자가 아닌 모든 문자. 부정 문자 범위에서는 다음을 사용할 수 있습니다.
[^\p{N}]
다음 문장에서 :
어때 잘 지내?
나는 2017 년을 기다릴 수 없다!
다음 문자가 일치합니다.
,
,,
'
?
, 줄 끝 문자 및 모든 문자 (소문자 및 대문자).
'
,,
!
, 줄 끝 문자 및 모든 문자 (소문자 및 대문자).
초급자가 직면하는 인성 계급 및 공통 문제
1. 캐릭터 클래스
문자 클래스는 []
로 표시됩니다. 문자 클래스 내의 내용은 single character separately
로 처리됩니다. 예를 들어 우리가
[12345]
위의 예에서 일치하는 1 or 2 or 3 or 4 or 5
합니다. 간단히 말해 or condition for single characters
( or condition for single characters
스트레스) 로 이해 or condition for single characters
으로 이해 될 수 있습니다.
1.1주의 사항
- 문자 클래스에는 문자열을 일치시키는 개념이 없습니다. 따라서 regex
[cat]
사용하고 있다면 문자 그대로cat
이라는 단어와 일치해야한다는 의미는 아니지만c
또는a
또는t
와 일치해야 함을 의미합니다. 이것은 regex에 새로운 사람들 사이에 존재하는 매우 일반적인 오해입니다. - 때때로 사람들은
|
(교대) 문자 클래스 내에서 그것은 잘못된OR condition
작용할 것이라고 생각합니다. 예 :[a|b]
실제로a
또는|
와 일치 함을 의미합니다. (문자 그대로) 또는b
.
2. 문자 클래스의 범위
문자 클래스의 범위는 -
기호로 표시됩니다. 영문자 A
~ Z
문자를 찾고 싶다고합시다. 다음 문자 클래스를 사용하여이 작업을 수행 할 수 있습니다.
[A-Z]
이것은 유효한 ASCII 또는 유니 코드 범위에 대해 수행 할 수 있습니다. 가장 일반적으로 사용되는 범위는 [AZ]
, [az]
또는 [0-9]
입니다. 또한이 범위는 문자 클래스로 결합 할 수 있습니다.
[A-Za-z0-9]
즉, 범위 A to Z
또는 a to z
또는 0 to 9
문자 0 to 9
. 순서는 무엇이든 될 수 있습니다. 따라서 위에서 정의한 범위가 정확하면 위의 내용은 [a-zA-Z0-9]
와 동일합니다.
2.1주의 사항
때로는
A
에서Z
까지의 범위를 작성할 때[Az]
로 작성합니다. 우리가Z
대신z
를 사용하기 때문에 이것은 대부분의 경우에 잘못입니다. 따라서 이것은 ASCII 범위90
(Z) 다음에 많은 의도하지 않은 문자가 포함 된 ASCII 범위65
(A) ~122
(z)의 문자와 일치한다는 것을 나타냅니다. 그러나 특정 언어에 대해 데이터 정렬이 설정되면[Az]
는 POSIX 스타일 정규 표현식의 모든[a-zA-Z]
문자를 일치시키는 데 사용할 수 있습니다.LC_COLLATE="en_US.UTF-8"
Cygwin에서[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
을[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
하면ABCEDF
생성ABCEDF
.[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
LC_COLLATE
를C
설정하면 (Cygwin에서export
완료) 예상 된ABCEDEF[]_abcdef
있습니다.의미
-
내부 문자 클래스는 특별합니다. 위에서 설명한대로 범위를 나타냅니다. 우리가 일치 할 경우-
문자 그대로? 우리는 두 문자 사이에 놓으면 범위를 나타낼 것입니다. 이 경우 우리는 넣어야 할-
같은 문자 클래스의 시작에[-AZ]
나 같은 문자 클래스의 끝에서[AZ-]
또는escape it
당신처럼 중간에 그것을 사용하려는 경우[AZ\-az]
.
3. 부정적 문자 클래스
부정 문자 클래스는 [^..]
로 표시됩니다. 캐럿 기호 ^
는 문자 클래스에있는 문자를 제외한 모든 문자와 일치한다는 것을 나타냅니다. 예
[^cat]
c
또는 a
또는 t
제외한 모든 문자를 t
.
3.1주의 사항
- 캐럿 기호
^
의 의미는 문자 클래스 시작시에만 부정에 매핑됩니다. 문자 클래스의 다른 곳에서는 특별한 의미가없는 문자 그대로의 캐럿 문자로 처리됩니다. - 어떤 사람들은
[^]
와 같은 정규식을 씁니다. 대부분의 regex 엔진에서는 오류가 발생합니다. 그 이유는^
를 시작 위치에 사용하고있을 때, 부정되어야 할 적어도 하나의 문자를 기대하기 때문입니다. JavaScript 에서는, 이것은 아무것도 아닌 , 즉 가능한 모든 심볼 (그러나 적어도 ES5에서는 발음 구별 부호)과 일치하는 유효한 구조입니다.
POSIX 문자 클래스
POSIX 문자 클래스는 특정 문자 집합에 대해 미리 정의 된 시퀀스입니다.
문자 클래스 | 기술 |
---|---|
[:alpha:] | 영문자 |
[:alnum:] | 영문자와 숫자 |
[:digit:] | 자릿수 |
[:xdigit:] | 16 진수 |
[:blank:] | 스페이스 및 탭 |
[:cntrl:] | 제어 문자 |
[:graph:] | 표시되는 문자 (공백 및 제어 문자 제외) |
[:print:] | 보이는 문자와 공백 |
[:lower:] | 소문자 |
[:upper:] | 대문자 |
[:punct:] | 구두점 및 기호 |
[:space:] | 줄 바꿈을 포함하여 모든 공백 문자 |
구현 및 / 또는 로케일에 따라 추가 문자 클래스를 사용할 수 있습니다.
문자 클래스 | 기술 |
---|---|
[:<:] | 단어의 시작 |
[:>:] | 단어의 끝 |
[:ascii:] | ASCII 문자 |
[:word:] | 문자, 숫자 및 밑줄. \w 와 같습니다. |
대괄호 시퀀스 (일명 문자 클래스)를 내부에서 사용하려면 대괄호도 포함해야합니다. 예:
[[:alpha:]]
이것은 하나의 영문자와 일치합니다.
[[:digit:]-]{2}
이것은 자릿수 또는 -
2 개의 문자와 일치합니다. 다음과 일치합니다.
-
--
-
11
-
-2
-
3-
자세한 정보는 Regular-expressions.info에서 확인할 수 있습니다.