정규식이란 무엇입니까?
정규식은 텍스트에서 특정 패턴을 찾는 데 사용되는 문자 또는 기호 그룹입니다.
https://dev.to/ziishaned/learn-regex-the-easy-way-c4g
정규식은 왼쪽에서 오른쪽으로 제목 문자열과 일치하는 패턴입니다.
"정규 표현식"이라는 단어는 한마디로 "regex"또는 "regexp"로 약칭 된 용어를 찾을 수 있습니다.
정규식은 텍스트를 바꾸는 데 사용됩니다.
문자열, 유효성 검사 양식, 패턴 일치 등을 기반으로 문자열에서 하위 문자열을 추출합니다.
애플리케이션을 작성 중이고 사용자가 사용자 이름을 선택할 때의 규칙을 설정하려고 한다고 가정하십시오.
우리는 하고 싶다 사용자 이름에 문자, 숫자, 밑줄 및 하이픈을 포함 할 수 있습니다. 우리는 또한 수를 제한하고 싶습니다 사용자 이름에 문자가 표시되어보기 흉하게 보이지 않습니다. 다음 정규식을 사용하여 사용자 이름을 확인합니다.
위의 정규 표현식은 문자열 john_doe, jo-hn_doe 및 john12_as를 승인 할 수 있습니다. 해당 문자열 때문에 Jo와 일치하지 않습니다. 대문자가 포함되어 있으며 너무 짧습니다.
1. Basic Matchers
정규식은 텍스트에서 검색을 수행하는 데 사용하는 문자 패턴입니다. 예를 들어 정규식 의미 : 문자 t, 문자 h, 문자 e
"the" => The fat cat sat on the mat.
정규식 123은 문자열 123과 일치합니다. 정규식은 각각을 비교하여 입력 문자열과 일치합니다. 정규식의 문자를 입력 문자열의 각 문자에 하나씩 차례로 입력합니다. 정규식은 일반적으로 대소 문자를 구분하므로 정규식은 문자열과 일치하지 않습니다.
"The" => The fat cat sat on the mat.
2. Meta Characters
메타 문자는 정규식의 구성 요소입니다. 메타 문자는 스스로를 의미하지 않지만 대신 특별한 방법으로 해석됩니다.
일부 메타 문자는 특별한 의미가 있으며 대괄호 안에 표시됩니다. 메타 문자는 다음과 같습니다.
2.1 Full stop
완전 정지. 메타 문자의 가장 간단한 예입니다. 메타 문자. 단일 문자와 일치합니다. 반품과 일치하지 않습니다 또는 개행 문자. 예를 들어 정규식 .ar은 다음을 의미합니다. 모든 문자, 문자 a, 뒤에 문자 r.
".ar" => The car parked in the garage.
2.2 Character set
문자 집합을 문자 클래스라고도 합니다. 대괄호는 문자 집합을 지정하는 데 사용됩니다. 문자 세트 안에 하이픈을 사용하여 문자의 범위를 지정하십시오.
대괄호 안의 문자 범위 순서는 중요하지 않습니다. 예를 들어 표현 [Tt] : 대문자 T 또는 소문자 t, 문자 h, 문자 e가 뒤 따른다.
"[Tt]he" => The car parked in the garage.
그러나 문자 집합 내의 마침표는 리터럴 마침표를 의미합니다. 정규식 ar [.]은 다음을 의미합니다 : 소문자 a, 뒤에 문자 r, 마침표. 캐릭터.
"ar[.]" => A garage is a good place to park a car.
2.2.1 Negated character set
일반적으로 캐럿 기호는 문자열의 시작을 나타내지 만 여는 대괄호 뒤에 입력하면 문자 세트. 예를 들어, 정규식 [^ c] ar는 다음을 의미합니다. c를 제외한 모든 문자, 그 뒤에 문자 a, 그 뒤에 오는 문자 r.
"[^c]ar" => The car parked in the garage.
2.3 Repetitions
메타 문자 뒤에 오는 +, * 또는? 하위 패턴이 몇 번 발생할 수 있는지 지정하는 데 사용됩니다. 이 메타 문자는 상황에 따라 다릅니다.
2.3.1 The Star
* 기호는 이전 매처의 반복 횟수가 0 이상입니다. 정규식 a *는 0 회 이상의 반복을 의미합니다. 선행 소문자 a. 그러나 문자 세트 또는 클래스 뒤에 나타난 경우 전체의 반복을 찾습니다. 문자 세트. 예를 들어, 정규식 [a-z] *는 다음을 의미합니다.
"[a-z]*" => The car parked in the garage #21.
* 기호는 메타 문자와 함께 사용할 수 있습니다. 모든 문자열과 일치합니다. *. * 기호는 공백 문자 \ s는 공백 문자 문자열과 일치합니다. 예를 들어, \ s * cat \ s * 표현식은 0 이상을 의미합니다. 공백, 소문자 c, 소문자 a, 소문자 t, 소문자 t 0 개 이상의 공백.
"\s*cat\s*" => The fat cat sat on the concatenation.
2.3.2 The Plus
+ 기호는 이전 문자의 하나 이상의 반복과 일치합니다. 예를 들어 정규식 c. + t는 다음을 의미합니다. 문자 c 뒤에 하나 이상의 문자가 오고 뒤에 소문자 t가옵니다. t가 문장의 마지막 t임을 명확히 해야 합니다.
"c.+t" => The fat cat sat on the mat.
2.3.3 The Question Mark
정규식에서 메타 문자? 선행 문자를 선택적으로 만듭니다. 이 기호는 0 개 또는 1 개의 인스턴스와 일치합니다. 앞의 문자. 예를 들어, 정규식 [T]?는 다음을 의미합니다. 대문자 대문자 T (선택적)와 소문자 (소문자) 문자 h 뒤에 소문자 e가옵니다.
"[T]he" => The car is parked in the garage.
"[T]?he" => The car is parked in the garage.
2.4 Braces
정규 표현식에서는 수량 자라고도 하는 중괄호를 사용하여 문자 또는 문자 그룹을 반복 할 수 있습니다. 예를 들어 정규식 [0-9] {2,3}은 다음을 의미합니다. 2 자리 이상 3 자리 이하 ( 0에서 9 사이의 문자).
"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
우리는 두 번째 숫자를 생략 할 수 있습니다. 예를 들어, 정규식 [0-9] {2,}는 다음을 의미합니다. 2 자리 이상의 숫자와 일치합니다. 우리도 제거하면 쉼표 정규식 [0-9] {3}의 의미 : 정확히 3 자리와 일치합니다.
"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
2.5 Character Group
문자 그룹은 괄호 (...)로 작성된 하위 패턴 그룹입니다. 앞에서 정규식으로 논의 했듯이 문자 뒤에 한정자를 넣으면 앞의 문자가 반복됩니다. 그러나 캐릭터 그룹 뒤에 수량자를 넣으면 전체 문자 그룹을 반복합니다. 예를 들어, 정규식 (ab) *은 문자 "ab"의 반복이 0 개 이상 일치합니다. 우리는 또한 교대를 사용할 수 있습니다 | 문자 그룹 내부의 메타 문자. 예를 들어 정규식 (c | g | p) ar는 소문자 c, g 또는 p, 문자 a, 문자 r이 차례로 옵니다.
"(c|g|p)ar" => The car is parked in the garage.
2.6 Alternation
정규식 세로 막대 | 대체를 정의하는 데 사용됩니다. 교대는 여러 식 사이의 조건과 같습니다. 지금, 문자 세트와 대체가 같은 방식으로 작동한다고 생각할 수도 있습니다. 그러나 문자 집합과 대체의 큰 차이점 문자 세트는 문자 레벨에서 작동하지만 대체는 표현식 레벨에서 작동한다는 것입니다. 예를 들어 정규식 (T | t) 카 : 대문자 T 또는 소문자 t, 소문자 h, 소문자 e 또는 소문자 c, 소문자 a, 소문자 r이 뒤 따릅니다.
"(T|t)he|car" => The car is parked in the garage.
2.7 Escaping special character
백 슬래시 \는 정규식에서 다음 문자를 이스케이프 하기 위해 사용됩니다. 이를 통해 기호를 일치하는 문자로 지정할 수 있습니다 예약 문자 포함 {} [] / \ + *. $ ^ | ?. 특수 문자를 일치하는 문자로 사용하려면 앞에 \를 추가하십시오. 예를 들어 정규 표현식입니다. 개행을 제외한 모든 문자를 일치시키는 데 사용됩니다. 이제 일치합니다. 입력 문자열에서 정규 식 (f | c | m) at \.? 의미 : 소문자 f, c 또는 m, 소문자 a, 소문자 t 다음에 선택적. 캐릭터.
"(f|c|m)at\.?" => The fat cat sat on the mat.
2.8 Anchors
정규 표현식에서 앵커를 사용하여 일치하는 기호가 시작 기호 또는 끝 기호인지 확인합니다. 입력 문자열. 앵커는 두 가지 유형입니다. 첫 번째 유형은 Caret ^이며 일치하는 문자가 시작인지 확인합니다. 입력의 문자이고 두 번째 유형은 Dollar $이며 일치하는 문자가 마지막 문자인지 확인합니다. 입력 문자열.
2.8.1 Caret
캐럿 ^ 기호는 일치하는 문자가 입력 문자열의 첫 번째 문자인지 확인하는 데 사용됩니다. 다음의 규칙을 적용하면 ^ a (a가 시작 기호 인 경우) 문자열 abc를 입력하려면 a와 일치합니다. 그러나 위의 정규식 ^ b를 적용하면 입력 문자열이 일치하지 않습니다. 입력 문자열에서 abc "b"는 시작 기호가 아니기 때문입니다. 다른 것을 보자 정규식 ^ (T | t) he 의미 : 대문자 T 또는 소문자 t는 입력 문자열의 시작 기호입니다. 소문자 h 뒤에 소문자 e가옵니다.
"(T|t)he" => The car is parked in the garage.
"^(T|t)he" => The car is parked in the garage.
2.8.2 Dollar
달러 $ 기호는 일치하는 문자가 입력 문자열의 마지막 문자인지 확인하는 데 사용됩니다. 예를 들어 정규식 (at \.) $ 의미 : 소문자 a, 소문자 t, a 캐릭터와 매처 문자열의 끝이어야 합니다.
"(at\.)" => The fat cat. sat. on the mat.
"(at\.)$" => The fat cat. sat. on the mat.
3. Shorthand Character Sets
정규식은 일반적으로 사용되는 문자 집합에 대한 속기를 제공하며, 일반적으로 사용되는 문자에 대한 편리한 속기 정규식. 속기 문자 집합은 다음과 같습니다.
Shorthand | Description |
---|---|
. | Any character except new line |
\w | Matches alphanumeric characters: [a-zA-Z0-9_] |
\W | Matches non-alphanumeric characters: [^\w] |
\d | Matches digit: [0-9] |
\D | Matches non-digit: [^\d] |
\s | Matches whitespace character: [\t\n\f\r\p{Z}] |
\S | Matches non-whitespace character: [^\s] |
4. Lookaround
룩 어라운드 및 룩어 헤드는 룩 어라운드라고도 하는 특정 유형의 캡처되지 않은 그룹입니다 (패턴과 일치하는 데 사용하지만 일치하는 목록에 포함). Lookaheads는 이 패턴이 다른 패턴보다 우선하거나 다른 조건이 있을 때 사용됩니다 무늬. 예를 들어, 다음 입력 문자열 $ 4.44 및 $ 10.88에서 $ 문자가 앞에 오는 모든 숫자를 가져 오려고 합니다. 다음 정규식 (? <= \ $) [0-9 \.] *을 사용합니다. 즉,를 포함하는 모든 숫자를 가져옵니다. 문자와 앞에 $ 문자로. 다음은 정규식에 사용되는 대안입니다.
Symbol | Description |
---|---|
?= | Positive Lookahead |
?! | Negative Lookahead |
?<= | Positive Lookbehind |
?<! | Negative Lookbehind |
4.1 Positive Lookahead
긍정적 인 미리보기는 표현식의 첫 번째 부분 다음에 미리보기 표현식이 있어야 한다고 주장합니다. 반환 된 경기 식의 첫 부분과 일치하는 텍스트 만 포함합니다. 긍정적 인 예측을 정의하기 위해 괄호가 사용됩니다. 이내에 괄호, 등호가 있는 물음표는 다음과 같이 사용됩니다 : (? = ...). Lookahead 표현식은 내부의 등호 뒤에 작성됩니다. 괄호. 예를 들어, 정규식 [T | t] he (? = \ sfat)은 다음을 의미합니다. 선택적으로 소문자 t 또는 대문자 T와 일치합니다. 뒤에 문자 h, 문자 e가옵니다. 괄호 안에 정규 표현식 엔진이 일치하도록 지시하는 긍정적 예측을 정의합니다. 또는 뒤에는 지방이라는 단어가 옵니다.
"[T|t]he(?=\sfat)" => The fat cat sat on the mat.
4.2 Negative Lookahead
네거티브 lookahead는 패턴이 뒤 따르지 않는 입력 문자열에서 모든 일치 항목을 가져와야 할 때 사용됩니다. 부정적 예측 우리가 긍정적 인 예측을 정의하는 것과 동일하게 정의되었지만 유일한 차이점은 우리가 부정을 사용하는 equal = character 대신입니다! 캐릭터 즉 (?! ...). 다음 정규식 [T | t] he (?! \ sfat)을 살펴 봅시다. fat 단어 뒤에 오는 입력 문자열 앞에 공백 문자가 옵니다.
"[T|t]he(?!\sfat)" => The fat cat sat on the mat.
4.3 Positive Lookbehind
양의 lookbehind는 특정 패턴이 앞에 오는 모든 일치 항목을 가져 오는 데 사용됩니다. 긍정적 인 lookbehind는 (? <= ...). 예를 들어 정규식 (? <= [T | t] he \ s) (fat | mat)은 다음을 의미합니다. 입력 문자열에서 모든 지방 또는 매트 단어를 가져옵니다. 단어 뒤에 또는 입니다.
"(?<=[T|t]he\s)(fat|mat)" => The fat cat sat on the mat.
4.4 Negative Lookbehind
음수 lookbehind는 특정 패턴이 선행되지 않는 모든 일치 항목을 가져 오는 데 사용됩니다. 부정적인 lookbehind는 (? <! ...). 예를 들어 정규식 (? <! (T | t) he \ s) (cat)은 다음을 의미합니다. 입력 문자열에서 모든 고양이 단어를 가져옵니다. 또는 단어 뒤에 있지 않습니다.
"(?<![T|t]he\s)(cat)" => The cat sat on cat.
5. Flags
플래그는 정규식의 출력을 수정하기 때문에 수정 자라고도 합니다. 이 플래그는 어떤 순서로나 사용할 수 있습니다 RegExp의 필수 요소입니다.
Flag | Description |
---|---|
i | Case insensitive: Sets matching to be case-insensitive. |
g | Global Search: Search for a pattern throughout the input string. |
m | Multiline: Anchor meta character works on each line. |
5.1 Case Insensitive
i 수정자는 대소 문자를 구분하지 않는 일치를 수행하는 데 사용됩니다. 예를 들어, 정규식 / The / gi는 대문자를 의미합니다. T 뒤에 소문자 h, 문자 e가옵니다. 정규식이 끝나면 i 플래그는 대소 문자를 무시하는 정규식 엔진. 보시다시피 패턴을 검색하기 위해 g 플래그도 제공했습니다. 전체 입력 문자열
"The" => The fat cat sat on the mat.
"/The/gi" => The fat cat sat on the mat.
5.2 Global search
g 수정자는 전체 일치를 수행하는 데 사용됩니다 (첫 번째 일치 후 중지하지 않고 모든 일치를 찾습니다). 예를 들어 정규 표현식 /.(at)/g 의미 : 줄 바꾸기를 제외한 모든 문자, 소문자 a, 소문자 문자 t. 정규 표현식 끝에 g 플래그를 제공했기 때문에 이제 전체 입력에서 모든 일치 항목을 찾습니다. 문자열.
"/.(at)/" => The fat cat sat on the mat.
"/.(at)/g" => The fat cat sat on the mat.
5.3 Multiline
m 수정자는 여러 줄 일치를 수행하는 데 사용됩니다. 앞에서 설명한 것처럼 앵커 (^, $)는 패턴이 있는지 확인하는 데 사용됩니다. 입력의 시작 또는 입력 문자열의 끝 그러나 앵커가 각 라인에서 작동하도록 하려면 m 플래그를 사용하십시오. 예를 들어 정규 표현식 /at(.)?$/gm 의미 : 소문자 a, 소문자 t, 선택적으로 new 이외의 것 선. 그리고 m 플래그 때문에 이제 정규 표현식 엔진은 문자열의 각 줄 끝에서 패턴을 찾습니다.
"/.at(.)?$/" => The fat
cat sat
on the mat.
"/.at(.)?$/gm" => The fat cat sat on the mat.
등록된 댓글이 없습니다.