>웹 프론트엔드 >JS 튜토리얼 >정규식 입문 튜토리얼

정규식 입문 튜토리얼

巴扎黑
巴扎黑원래의
2017-08-09 13:44:341216검색

정규식에 대한 30분 입문 튜토리얼

    1. 이 글의 목표

    2. 이 튜토리얼을 사용하는 방법

    3. 정규 표현식이란 정확히 무엇인가요?

    4. 시작하기

    5. 정규식 테스트

    6. 메타문자

    7. 문자 이스케이프

    8. 복제

    9. 문자 클래스

    10. 분기 조건

    11. 반의어 +

    12. 처리 중 options
    13. 균형 있는 그룹/재귀적 일치
    14. 언급되지 않은 내용이 있습니다
    15. 저자에게 문의하세요
    16. 마지막으로 약간의 광고...
    17. 이 기사에 대한 온라인 리소스 및 참고 자료
    18. 업데이트 기록
    19. 버전: v2.31 (2009-4-11) 작성자: deerchao 전재할 경우 출처를 밝혀주세요
    20. 목차

    21. 목차 건너뛰기
    22. 이 글의 목적

    23. 30분 안에 정규 표현식이 무엇인지 이해하고 자신의 프로그램이나 웹 페이지에서 사용할 수 있도록 기본적인 이해를 해보세요.
    24. 이 튜토리얼을 사용하는 방법

    25. 가장 중요한 것은 - 저에게
    26. 30분

      시간을 주세요. 정규 표현식에 대한 경험이 없다면 30

      초 안에 시작하려고 하지 마세요
    27. - 초인이 아닌 이상 :)
    28. 아래의 복잡한 표현에 겁먹지 마시고, 차근차근 따라오시면 정규표현식이 생각보다 어렵지 않다는 것을 아실 겁니다. 물론, 이 튜토리얼을 읽은 후에 많은 것을 이해했지만 거의 아무것도 기억하지 못한다면 그것은 정상입니다. 정규식에 노출된 적이 없는 사람들도 이 튜토리얼을 읽고 나면 많은 것을 이해하게 될 것이라고 생각합니다. tutorial., 언급된 문법의 80% 이상을 기억할 확률은 0입니다. 이는 기본 원리를 이해하도록 하기 위한 것입니다. 정규식을 능숙하게 익히려면 앞으로 더 많이 연습하고 사용해야 할 것입니다.

    29. 이 기사는 입문 튜토리얼일 뿐만 아니라 일상 업무에서 사용할 수 있는 정규식 구문 참조 매뉴얼이 되려고 합니다. 작가 자신의 경험에 비추어 볼 때, 이 목표는 잘 달성되었습니다. 알다시피, 제가 모든 것을 직접 적을 수는 없습니다. 그렇죠?
    30. 서식 지우기
    31. 텍스트 형식 규칙:

    기술 용어

    메타 문자/문법 형식

    정규 표현식

    정규 표현식의 일부(분석용) 쌍 소스 문자열 it 일치

    정규식 또는 그 일부에 대한 설명

    사이드 노트 숨기기 이 글의 오른쪽에는 주로 관련 정보를 제공하거나 프로그래머 배경 지식이 없는 사람들을 위한 몇 가지 기본 설명이 있습니다. 개념은 독자에게 설명되며 일반적으로 무시될 수 있습니다. 정규 표현식이란 정확히 무엇인가요? 문자는 컴퓨터 소프트웨어가 문자, 숫자, 구두점, 공백, 줄 바꿈, 한자 등의 텍스트를 처리할 때 가장 기본적인 단위입니다. 문자열 은 0개 이상의 문자로 구성된 시퀀스입니다. Text는 텍스트, 문자열입니다. 특정 문자열 이 특정 정규 표현식과 일치 한다는 것은 일반적으로 문자열의 일부(또는 여러 부분)가 표현식에서 제공하는 조건을 충족할 수 있음을 의미합니다. 문자열을 처리하는 프로그램이나 웹페이지를 작성할 때 특정 복잡한 규칙과 일치하는 문자열을 찾아야 하는 경우가 종종 있습니다.

    정규 표현식은 이러한 규칙을 설명하는 데 사용되는 도구입니다. 즉, 정규식은 텍스트 규칙을 기록하는 코드입니다.

    아마도 Windows/Dos에서 파일 검색을 위해 wildcard, 즉 *?을 사용했을 것입니다. 특정 디렉터리에 있는 모든 Word 문서를 찾으려면 *.doc를 검색하세요. 여기서 *는 임의의 문자열로 해석됩니다. 와일드카드와 유사하게 정규 표현식도 텍스트 일치에 사용되는 도구이지만 와일드카드보다 요구 사항을 더 정확하게 설명할 수 있습니다. 물론 더 복잡해지는 대가를 치르게 됩니다. 예를 들어 정규 표현식을 작성하여 다음을 찾는 데 사용됩니다. 0으로 시작하는 모든 문자열, 2~3자리 숫자, 하이픈 "-", 마지막으로 7~8자리 (예: 010-12345678 또는 0376-7654321).

    시작하기

    정규식을 배우는 가장 좋은 방법은 예제로 시작하는 것입니다. 예제를 이해한 후 직접 예제를 수정하고 실험해 보세요. 아래에는 여러 가지 간단한 예가 나와 있으며 자세히 설명되어 있습니다.

    영어 소설에서 hi을 검색한다고 가정하면 정규식 hi을 사용할 수 있습니다.

    이것은 거의 가장 간단한 정규식입니다. 다음과 같이 문자열을 정확하게 일치시킬 수 있습니다. 는 두 문자로 구성되며 첫 번째 문자는 h이고 다음 문자는 i입니다. 일반적으로 정규식을 처리하는 도구에서는 대소문자를 무시하는 옵션을 제공합니다. 이 옵션을 선택하면 hi,HI,Hi,hIthis와 일치할 수 있습니다. 네 가지 상황.

    불행히도 him, history, high 등과 같이 많은 단어에 두 개의 연속된 문자 hi가 포함되어 있습니다. hi를 사용하여 검색하면 hi도 검색됩니다. hi라는 단어를 정확하게 검색하려면 /bhi/b을 사용해야 합니다.

    /b는 정규 표현식(글쎄, 어떤 사람들은 메타문자, 메타문자이라고도 함)으로 지정되는 특수 코드로, 단어 의 시작이나 끝, 즉 끝을 나타냅니다. 경계라는 단어 . 영어 단어는 일반적으로 공백, 구두점 또는 줄 바꿈으로 구분되지만 /b은 이러한 단어 구분 문자와 일치하지 않으며 한 위치에만 일치합니다.

    좀 더 정확하게 하자면 /b는 앞뒤 문자가 둘 다 아닌(하나는 존재하거나 존재하지 않음) /w 위치와 일치합니다.

    찾는 것이 hi 다음에 Lucy가 멀지 않은 경우 /bhi/b.*/bLucy/b를 사용해야 합니다.

    여기서 .은 줄 바꿈을 제외하고 모든 문자와 일치하는 또 다른 메타 문자입니다. *도 메타 문자이지만 문자나 위치가 아니라 수량을 나타냅니다. * 앞에 있는 내용을 여러 번 재사용하여 전체 표현식을 일치시킬 수 있음을 지정합니다 . 따라서 .*을 함께 사용하면 줄 바꿈을 포함하지 않는 문자 수 를 의미합니다. 이제 /bhi/b.*/bLucy/b의 의미는 분명합니다. 첫 번째 단어는 hi이고 그 다음에는 원하는 수의 문자(줄 바꿈은 아님), 마지막으로 Lucy 라는 단어입니다.

    개행 문자는 ASCII 인코딩 10(16진수 0x0A)을 사용하는 문자인 '/n'입니다.

    다른 메타 문자를 동시에 사용하면 더욱 강력한 정규식을 구성할 수 있습니다. 예를 들어, 다음 예:

    0/d/d-/d/d/d/d/d/d/d/d/d는 다음과 같은 문자열과 일치합니다. 는 0으로 시작하고 그 다음 두 개의 숫자가 표시됩니다. , 하이픈 "-", 마지막으로 8자리 (즉, 중국 전화번호입니다. 물론 이 예는 지역번호가 3자리인 상황에만 일치할 수 있습니다).

    여기 /d한 자리 숫자(0, 1, 2, 또는...)와 일치하는 새로운 메타 문자입니다. -은(는) 메타 문자가 아니며 하이픈(또는 빼기 기호, 대시 또는 원하는 이름)과만 일치합니다.

    너무 많은 귀찮은 반복을 피하기 위해 다음과 같이 표현식을 쓸 수도 있습니다: 0/d{2}-/d{8}. 여기서 /d 뒤의 {2}({8})은 이전 /d이 2번(8번) 반복되고 일치해야 함을 의미합니다 연속.

    정규식 테스트

    기타 사용 가능한 테스트 도구:

    • RegexBuddy

    • Javascript 정규식 온라인 테스트 도구

    정규식을 읽고 쓰는 것이 어렵지 않다면 당신은 천재이거나 지구인이 아닙니다. 정규식의 구문은 정기적으로 사용하는 사람에게도 혼란스러울 수 있습니다. 읽고 쓰기가 어렵고 오류가 발생하기 쉽기 때문에 정규식을 테스트할 수 있는 도구를 찾는 것이 필요합니다.

    정규식의 일부 세부 사항은 환경에 따라 다릅니다. 이 튜토리얼에서는 Microsoft .Net Framework 2.0에서 정규식의 동작을 소개합니다. 따라서 .Net에서 Regex Tester라는 도구를 소개합니다. 먼저 .Net Framework 2.0이 설치되어 있는지 확인한 다음 Regex Tester를 다운로드하세요. 이것은 친환경 소프트웨어입니다. 다운로드한 후 압축된 패키지를 열고 RegexTester.exe를 직접 실행하세요.

    다음은 Regex Tester 실행 스크린샷입니다.

    Regex Tester运行时的截图

    Metacharacters

    이제 여러분은 /b,.,*과 같은 몇 가지 유용한 메타 문자를 이미 알고 계십니다. , 및 /d 정규식에는 /smatch공백, 탭, 개행 기호, 중국어 전각 공백 등을 포함한 모든 공백 문자와 같은 더 많은 메타 문자가 있습니다. . /w 문자, 숫자, 밑줄, 한자 등과 일치합니다. . 한자/한자 특수처리는 .Net에서 제공하는 정규식 엔진을 통해 지원됩니다. 기타 환경에서의 자세한 사항은 관련 문서를 확인해주세요.

    다음은 몇 가지 예입니다.

    /ba/w*/b 문자로 시작하는 단어 a - 먼저 단어의 시작 부분(/b ), 그 다음 문자 a, 문자 또는 숫자(/w*), 마지막으로 단어의 끝(/b)입니다. 좋아, 이제 정규 표현식의 단어가 의미하는 바에 대해 이야기해 보겠습니다. 연속된 1개 이상의

    /w. 네, 이것은 영어를 배울 때 외워야 하는 같은 이름을 가진 수천 가지와는 거의 관련이 없습니다 :)

    /d+match1개 이상의 연속 숫자. 여기서 +*와 유사한 메타 문자입니다. 차이점은 *가 여러 번(아마도 0회) 과 일치하고, +은 일치한다는 것입니다. 1회 이상 반복하세요.

    /b/w{6}/b는 정확히 6자로 구성된 단어와 일치합니다.

    표 1. 일반적으로 사용되는 메타 문자
    Code Description
    . 줄 바꿈을 제외한 모든 문자와 일치합니다
    /w 문자, 숫자, 밑줄 또는 중국어 문자와 일치
    /s 공백 문자와 일치
    /d 숫자 일치
    /b 단어의 시작 또는 끝 일치
    ^ 문자열의 시작과 일치
    $ 문자열의 끝과 일치

    정규식 엔진은 일반적으로 JavaScript의 RegExp.test() 메서드 또는 .NET의 Regex.IsMatch() 메서드와 같이 "지정된 문자열이 정규식과 일치하는지 테스트"하는 메서드를 제공합니다. 여기서 일치한다는 것은 문자열 중 표현 규칙을 따르는 부분이 있는지 여부를 나타냅니다. ^$을 사용하지 않는 경우 /d{5,12}에 대해 이 방법을 사용하면 문자열 에 5~12개의 연속 숫자가 포함되는지 확인할 수 있습니다 , 전체 문자열이 5~12자리가 아닙니다.

    메타 문자 ^(숫자 6과 동일한 키의 기호) 및 $는 모두 위치와 일치하며 이는 /b과 다소 유사합니다. ^는 찾으려는 문자열의 시작 부분과 일치하고, $은 끝 부분과 일치합니다. 이 두 코드는 입력 내용을 확인할 때 매우 유용합니다. 예를 들어 웹 사이트에서 QQ 번호를 5~12자리로 입력해야 하는 경우 다음을 사용할 수 있습니다. ^/d{5,12}$ .

    여기의 {5,12}는 이전에 소개된 {2}과 유사합니다. 단, {2}matching은 2번만 반복할 수 있습니다. 더 이상, 아니요 less , {5,12} 반복 횟수가 5회 미만일 수 없고 12회 를 초과할 수 없음을 의미합니다. 그렇지 않으면 일치하지 않습니다.

    ^$을 사용하므로 전체 입력 문자열을 사용하여 /d{5,12}과 일치해야 하며, 이는 전체 입력 이 5여야 함을 의미합니다. 최대 12자리 이므로 입력한 QQ 번호가 이 정규식과 일치할 수 있으면 요구 사항을 충족하는 것입니다.

    대소문자 무시 옵션과 유사하게 일부 정규식 처리 도구에는 여러 줄을 처리하는 옵션도 있습니다. 이 옵션을 선택하면 ^$의 의미는 줄의 시작과 끝에 맞춰 이 됩니다.

    문자 이스케이프

    메타 문자 자체를 검색하려는 경우(예: . 또는 *를 검색하는 경우) 문제가 있습니다. 메타 문자는 무언가로 해석되므로 지정할 수 없습니다. 그 외. 의미. 이때 해당 문자의 특별한 의미를 취소하려면 /를 사용해야 합니다. 따라서 /./*을 사용해야 합니다. 물론 / 자체를 찾으려면 //.

    도 사용해야 합니다. 예: unibetter/.comunibetter.com, C와 일치합니다. ://Windows 일치 C:/Windows.

    반복

    이미 이전 *, +, {2}, {5,12}을 보셨습니다. 다음은 정규 표현식의 모든 한정자입니다(*, {5,12} 등과 같은 지정된 코드 수):

    표 2. 일반적으로 사용되는 한정자
    코드/구문 Description
    * 0회 이상 반복
    + 한 번 이상 반복
    ? 0번 또는 한 번 반복
    {n} n회 반복
    {n,} n회 이상 반복
    {n,m} n~m번 반복

    다음은 반복 사용의 몇 가지 예입니다.

    Windows /d+일치 Windows 다음에 하나 이상의 숫자

    ^/w+일치 줄의 첫 번째 단어(또는 전체 문자열의 첫 단어, 구체적인 일치 의미는 옵션 설정에 따라 다름)

    문자 클래스

    해당 문자가 이미 있기 때문에 숫자, 문자 또는 숫자, 공백을 찾는 것이 매우 간단합니다. 집합이지만 미리 정의된 메타 문자(예: 모음 a, e, i, o, u) 없이 문자 집합을 일치시키려면 어떻게 해야 할까요?

    매우 간단합니다. 대괄호 안에 나열하면 됩니다. 예를 들어 [aeiou]모든 영어 모음 , [.?!]match 구두점(. 아니면?).

    문자 range를 쉽게 지정할 수도 있습니다. 예를 들어 [0-9]/d과 정확히 동일함을 의미합니다. 한 자리; a-z0-9A-Z_]/w(영어만 고려하는 경우)과도 완전히 동일합니다. 여기 더 복잡한 표현이 있습니다:

    /(?0/d{2}[) -]?/d{8}. "(" 및 ")"도 메타 문자이므로 나중에 그룹화 섹션에서 언급할 것이므로 여기서 이스케이프해야 합니다.

    이 표현식은

    (010)88886666, 022-22334455 또는 02912345678과 같은 여러 형식으로 전화번호와 일치할 수 있습니다. 잠깐. 이에 대한 몇 가지 분석을 해보겠습니다. 먼저 이스케이프 문자 /(, 0 또는 1회 나타날 수 있음(?)이 있고 그 다음에는 0이 있고 그 뒤에 2개의 숫자( /d{2}), ) 또는 - 또는 space 중 하나이며, 1번 나타나거나 나타나지 않으며(?) 마지막으로 8개의 숫자가 나타납니다. (/d{8}). 분기 조건

    안타깝게도 지금의 표현식은

    010)12345678 또는 (022-87654321과 같은 "잘못된" 형식과도 일치할 수 있습니다. 이 문제를 해결하려면 를 사용해야 합니다. 분기 조건 . 정규 표현식의 분기 조건 은 여러 규칙을 참조하며, 구체적인 방법은 | 을 사용하는 것입니다. 이해가 안 되시나요? 괜찮습니다. 예를 살펴보세요.

    0/d{2}-/d{8}|0/d{3}-/d{7}이 표현은 하이픈으로 구분된 두 가지 유형의 전화번호와 일치할 수 있습니다. 하나는 3자리 지역 번호와 8자리 지역 번호(예: 010-12345678)이고 다른 하나는 4자리 지역 번호와 7- 숫자 지역 번호(0376-2233445) .

    /(0/d{2}/)[- ]?/d{8}|0/d{2}[- ]?/d{8} 이 표현 은 지역 번호가 3자리인 전화번호와 일치합니다. 지역 번호는 괄호로 묶을 수도 있고, 지역 번호를 하이픈이나 공백으로 구분할 수도 있습니다. 구분 없음. 분기 조건을 사용하여 이를 표현해 볼 수 있습니다. 수식은 4자리 지역 코드도 지원하도록 확장되었습니다.

    /d{5}-/d{4}|/d{5}이 표현식은 미국의 우편번호를 일치시키는 데 사용됩니다. 미국 우편번호 규칙은 5자리 또는 하이픈으로 구분된 9자리입니다. 이 예제가 제공되는 이유는 문제를 설명할 수 있기 때문입니다. 분기 조건을 사용할 때 각 조건의 순서에 주의하세요. /d{5}|/d{5}-/d{4}로 변경하면 우편번호 5자리(9자리 우편번호 중 앞 5자리)만 일치합니다. . 그 이유는 분기 조건을 일치시킬 때 각 조건이 왼쪽에서 오른쪽으로 테스트되기 때문입니다. 특정 분기가 충족되면 다른 조건은 고려되지 않습니다.

    그룹화

    단일 문자를 반복하는 방법을 이미 언급했습니다(문자 바로 뒤에 한정자를 추가하면 됩니다). 하지만 여러 문자를 반복하려면 어떻게 해야 할까요? 괄호를 사용하여 subexpression(grouping이라고도 함)을 지정한 다음 이 하위 표현식의 반복 횟수를 지정할 수 있고 하위 표현식에 대해 다른 작업을 수행할 수도 있습니다(나중에 소개됩니다). .

    (/d{1,3}/.){3}/d{1,3}간단한 IP 주소 일치 표현식입니다. 이 표현식을 이해하려면 다음 순서로 분석하세요. /d{1,3}1에서 3자리, (/d{1,3}/.){ 3} 과 일치합니다. 세 자리 숫자와 영어 마침표(이 전체가 이 그룹 이기도 함)를 3번 반복하고 마지막으로 1~3자리 숫자 ( /d{1,3})를 추가합니다. ).

    IP 주소의 숫자는 255보다 클 수 없습니다. "24" 세 번째 시즌 작가님들의 말에 속지 마세요...

    안타깝게도 256.300.888.999도 일치합니다. 존재할 수 없는 IP 주소입니다. 산술 비교를 사용하면 이 문제를 간단하게 해결할 수 있지만 정규식은 수학 함수를 제공하지 않으므로 긴 그룹화, 선택 및 문자 클래스만 사용하여 올바른 IP 주소를 설명할 수 있습니다. ( (2[0-4]/d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25[0-5 ]| [01]?/d/d?).

    이 표현을 이해하는 열쇠는 2[0-4]/d|25[0-5]|[01]?/d/d?를 이해하는 것입니다. 여기서는 자세히 설명하지 않겠습니다. 그것은 당신에게 달렸습니다. 당신은 그 의미를 분석할 수 있어야 합니다.

    위 내용은 정규식 입문 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.