>  기사  >  백엔드 개발  >  정규식의 상세한 기본 예제 분석

정규식의 상세한 기본 예제 분석

王林
王林앞으로
2019-08-29 11:57:422260검색

정규 표현식이 검증에 자주 등장합니다! 정규식을 좀 더 간단하게 이해하는 방법을 알려드리겠습니다.
먼저 일반 이름의 명명에 대해 이야기해 보겠습니다.

이 단어는 모두가 익숙할 것이라고 생각합니다! "정규 표현식". 정규 표현식의 "정규"는 일반적으로 "regular", "regular" 및 "conventional"로 번역됩니다. 여기서 "정규"는 "규칙"과 "법률"을 의미하고, 정규식은 "특정 규칙을 설명하는 표현"을 의미하며, 이를 정규식이라고 부릅니다. 실제로 정규식은 특정 동작을 규제하는 데 사용됩니다! 즉, 교통 법규를 준수해야 하는 것처럼 제약 사항입니다.
저는 개인적으로 규칙을 이해하는 것이 어렵지 않다고 생각합니다! 기억해야 할 몇 가지 사항을 추가하고 유연하게 적용하면 끝입니다!
알았어! 다음으로 규칙성의 본체에 대해 알아보겠습니다.
이런 사항을 이해하셨다면 먼저 규칙성의 핵심 사항을 살펴보겠습니다. 일반적으로 프로젝트에는 문제가 없습니다!

첫 번째 ""
이것은 일반적으로 문자를 특수 문자 또는 리터럴 문자로 표시하는 이스케이프 문자로 알려져 있습니다. 예를 들어 "n"은 "n"과 일치합니다. "n"이면 개행 문자입니다.
슬래시 ""만 쓰고 싶으면 어떻게 해야 합니까? 이것도 아주 간단해요! "\" 이렇게 쓰면 됩니다! "\"를 두 개 쓰는 이유는 무엇입니까? 단지 구별하기 위해서입니다.

두 번째 "^"
이것은 일반적으로 시작 문자로 알려져 있으며, 이는 정규식을 작성할 준비가 되었음을 의미합니다! RegExp 개체의 Multiline 속성이 설정된 경우 ^는 "n" 또는 "r" 다음의 위치와도 일치합니다.

세 번째 "$"
이것은 일반적으로 엔딩 문자로 알려져 있으며 엔딩이라고도 할 수 있습니다(아주 비전문적인 설명)! RegExp 개체의 Multiline 속성이 설정된 경우 $는 "n" 또는 "r" 앞의 위치와도 일치합니다

네 번째 "*"
이는 이전 하위 표현식과 0번 이상 일치합니다. 예를 들어 zo*는 "z" 및 "zo" 또는 "zoo"와 일치할 수 있습니다. 이 "*"는 {0,}

와 동일합니다. 다섯 번째 "+"
는 이전 하위 표현식과 한 번 이상 일치합니다. 예를 들어 "zo+"는 "zo" 및 "zoo" 또는 "zooo"와 일치할 수 있습니다. "*"와 "+"는 거의 0번이고 1번은 1번입니다. 이 "+"는 {1,}과 동일합니다.

6번째 "?"
이는 이전 하위 표현식과 0번 또는 1번 일치합니다. 예를 들어, "do(es)?"는 "do" 또는 "does"와 일치할 수 있습니다. 이 물음표는 0회 일치 또는 1회 일치를 의미합니다!

일곱 번째 "{}"
이 기호는 몇 번 일치합니까?
1,{n}은 특정 횟수와 일치합니다. n은 음수가 아닌 정수입니다. 예: "o{2}"는 다음을 의미합니다. good, food 등과 같은 "oo" 두 개만 일치시키면 됩니다! 하지만 o가 하나뿐이기 때문에 신체와 일치할 수 없습니다!
2,{n,}은 최소 n번 이상 일치합니다. n은 음수가 아닌 정수입니다(예: "o{2,}"). 이는 good, goood, gooood와 같이 2개 이상의 "oo"가 일치함을 의미합니다. 등. "o{1,}"은 "o+"와 동일합니다. "o{0,}"는 "o*"와 동일합니다.
3,{n,m}은 최소 n번 일치하고 최대 m번 일치합니다. n과 m은 모두 음수가 아닌 정수입니다. 여기서 n

8번째 "?" 특수 사용법
이 문자가 다른 제한자(*, +,?, {n}, {n,}, {n,m}) 바로 뒤에 오면 패턴 일치는 탐욕스럽지 않습니다. . non-greedy 모드는 가능한 한 적은 수의 검색된 문자열과 일치하는 반면, 기본 Greedy 모드는 가능한 많은 검색된 문자열과 일치합니다. 예를 들어 문자열 "oooo"의 경우 "o+?"는 단일 "o"와 일치하고 "o+"는 모든 "o"와 일치합니다.

9번째 "."
는 개행 문자 "n"을 제외한 모든 단일 문자와 일치합니다. 개행 문자 "n" 내의 임의의 문자와 일치시키려면 "(.|n)" 패턴을 사용하십시오.

열 번째 "패턴"
이 "패턴"은 언뜻 이해하기 쉽지 않습니다. 그러나 이에 대한 내 이해는 다음과 같습니다. 모든 사람에게 유용하기를 바랍니다.
1. ?:pattern은 패턴과 일치하지만 일치하는 결과를 얻지 못합니다. 예: k(?:1|2|3) k는 어떤 것과도 일치합니다. 123 중 하나, 예: k1| k2
2. ?=pattern 긍정적인 미리보기 예: K(?=1|2|3) K가 123 중 하나와 일치하면 K를 선택합니다. 예: k1 또는 k
3. ?! 패턴 순방향 부정 사전 검사, 예: k(?!1|2|3) K가 123 중 어느 것과도 일치하지 않으면 K를 선택합니다. 예: k1에서 k와 일치하지 않지만 k4, k5일 수 있습니다
4. ?< ;=pattern 역방향 긍정 조회 예: (?5. 역방향 부정 사전 검사(예: (?

11번째 "|"
이 기호는 또는 예를 들어 "f|good"이 "f" 또는 "good"과 일치할 수 있다는 의미입니다. 그렇다면 "(f|g)ood"는 "food"와 일치합니다” 또는 "좋은".

열두 번째 "[]"
이 기호는 문자 집합의 합을 의미합니다. "{}"와 비슷해 보이지만 의미가 많이 다릅니다.

13번째 "()"
이 기호 배열 또는 집합

1, [xyz]는 포함된 모든 문자와 일치합니다. 즉, 셋 중 하나를 선택하라는 것입니다. 예: "[abc]"는 "company"의 "a"와 일치할 수 있지만 "beautiful"에는 두 글자가 사용되므로 일치할 수 없습니다.
2. [^xyz] "non"이라고도 할 수 있는 부정 문자 집합입니다. 예: "[^abc]"는 "drop" 등과 일치할 수 있습니다! 단어에 "abc" 문자가 없으면 괜찮습니다.
3. [a-z] 문자 범위. 지정된 범위 내의 모든 문자와 일치합니다. 예를 들어, "[a-z]"는 "a"부터 "z"까지의 범위에 있는 모든 소문자 알파벳 문자와 일치합니다. 0부터 9까지의 숫자와 직접 일치하는 "[0-9]"로 쓸 수도 있습니다.
4. [^a-z] 모두가 그것이 무엇을 의미하는지 알아야 한다고 생각합니다. 맞죠. 그것은 여러분이 생각하는 것을 의미합니다. "a"에서 "z" 범위에 없는 모든 문자는 에서 봤습니다. 처음에는 a와 z 사이에 없는 글자인줄 알았습니다! a부터 z 사이에 문자가 없으면 중국어에는 "ü"만 있다고 했어요! 이건 "유"라고 읽는 것 같아요! 헤헤! 누구나 명확하게 볼 수 있습니다! 글자가 아니라 문자입니다.

“”와 글자의 특별한 의미를 살펴보겠습니다.
“b”는 단어의 경계와 일치하며 단어와 공백 사이의 위치를 ​​의미합니다. 예를 들어, "erb"는 "never"의 "er"와 일치할 수 있지만 "동사"의 "er"와는 일치하지 않습니다. 이렇게 기억하시면 더 쉬울 것 같습니다. 경계의 가장자리는 b로 시작합니다.
"B"는 "b"의 반대이며 단어가 아닌 경계와 일치합니다. "erB"는 "동사"의 "er"와 일치할 수 있지만 "never"의 "er"는 일치하지 않습니다.
“d”가 더 자주 사용됩니다! 이 점을 염두에 두시기 바랍니다. 이는 [0-9]에 해당하는 숫자와 일치합니다.
"D"도 이해하기 쉽습니다. [^0-9]와 같은 숫자가 아니라는 반대 의미도 있습니다.
"f"는 폼 피드 문자와 일치합니다. 이에 대해 너무 많이 설명할 필요가 없습니다! 다음 네 가지는 너무 많아서 설명하기가 너무 어렵습니다. 그냥 기억해! 프로젝트에 사용해보세요!
"n"은 개행 문자와 일치합니다.
"r"은 캐리지 리턴 문자와 일치합니다.
"t"는 탭 문자와 일치합니다.
"v"는 세로 탭 문자와 일치합니다.
"s"는 모든 null 문자와 일치하며 공백, 탭, 양식 피드 등을 포함한 모든 공백 문자와 일치합니다. [fnrtv]와 동일합니다. 즉, 여기에는 위의 5가지가 모두 포함되어 있습니다!
"S"는 [^ fnrtv]에 해당하는 공백이 아닌 문자입니다.
이쯤 되면 일반 룰이 실제로는 이런 캐릭터라고 다들 느끼실 텐데요! 그리고 그 중 일부는 우리의 논리적인 사고로 추론할 수 있고, 일부는 누구나 유연하게 사용할 수 있는 한 반복적이다.

"w"는 밑줄을 포함한 모든 단어 문자와 일치합니다. "[A-Za-z0-9_]"와 동일합니다. 이는 실무에서 꽤 많이 사용되므로 이 점을 염두에 두는 것이 좋습니다.

"W"는 단어가 아닌 숫자 문자와 일치합니다. "[^A-Za-z0-9_]"와 동일합니다.

알겠습니다! 기본적으로, 이것이 여러분이 기억해야 할 전부입니다! 일부 정규식 마스터는 이에 대해 "전혀 완성되지 않았나요?"라고 말할 수 있습니다. 제가 작성한 내용은 프로젝트에서 일반적이고 더 실용적인 몇 가지 사항일 뿐입니다. . 자유롭게 사용하세요.
다음으로 몇 가지 실질적인 작업을 수행하고 몇 가지 정규식을 구문 분석해 보겠습니다.
예를 들어 다음 일반 규칙은 다음과 같습니다. ^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][ 0-9 ])$
정규 정규식 전문가라면 한 눈에 무슨 내용인지 알 수 있을 거라 생각합니다. 물론, 강한 논리적 사고를 가진 사람들은 이것이 무엇인지 단 두 번만 봐도 알 것입니다. 그렇습니다. 그것은 시간의 법칙입니다.

OK 이 정규식을 분석해 보겠습니다. "^", "([0-1]?[0-9]|2[0-3])"는 그룹, "[0-1]?" 물음표는 0 또는 1이 최대 0개 또는 1개 있을 수 있다는 것입니다. "[0-9]"는 0에서 9 사이의 숫자입니다. "|"는 "또는"을 의미합니다. 이는 "[0- 1]" ?[0-9]"는 "2[0-3]"이고, "2[0-3]"은 2를 나타내는 첫 번째 2이고, 다음 0~3은 0과 3 사이의 임의의 숫자입니다. , ": "는 ":"을 의미합니다. "([0-5][0-9])"도 그룹입니다. "[0-5]"는 0에서 5 사이의 숫자입니다. "[0-9]" 0과 9 사이의 숫자입니다. ":"도 원래 의미이고, "([0-5][0-9])"도 그룹이고, "[0-5]"는 0과 5 사이의 숫자입니다. , "[0-9]"는 0에서 9 사이의 숫자이고 "$"는 종결자입니다.
모두 함께 소수를 분석해 볼까요

예: ^[1-9]+d*(.[0-9]{1,2})?|0(.[0-9]{1,2})?$
“^”는 시작 문자, "[1-9]+" 여기서 "+"는 1과 9 사이의 최소 하나 이상을 의미하고, "d*"에서는 "d"는 숫자, "*"는 최소 0개의 숫자가 있음을 의미합니다. 또는 여러 개의 숫자가 있습니다. "(.[0-9]{1,2})?" 이 그룹에는 "."이 원점입니다. "[0-9]{1,2}" 사이에 하나가 있습니다. 0 및 9 또는 두 개의 숫자가 있고 그 뒤에 물음표 "?"가 있으면 "(.[0-9]{1,2})"가 0 또는 1개 있음을 의미합니다. "|"는 "[1-9]+d*(.[0-9]{1,2})?" 또는 "0(.[0-9]{1,2})?"입니다. "0(.[0-9]{1,2})?" 이 그룹의 0은 원래 의미이고, 이 그룹의 "(.[0-9]{1,2})는 "."입니다. ?"는 원래 의미입니다. "[0-9]{1,2}" 0에서 9 사이에 하나 또는 두 개의 숫자가 있습니다. 그 뒤에 있는 물음표 "?"는 0 또는 하나의 숫자가 있음을 의미합니다. "(.[0 -9]{1, 2})".

아래에서는 일반적인 정규식의 몇 가지 예를 제공합니다.

^[1-9]d*$ // 양의 정수 일치
^-[1-9]d*$ // 음의 정수 일치
^-? [1-9]d*$ // 정수와 일치
^[1-9]d*|0$ // 음이 아닌 정수와 일치(양의 정수 + 0) ​
^-[1-9]d *|0 $ //양수가 아닌 정수 일치(음의 정수 + 0)  
^[1-9]d*.d*|0.d*[1-9]d*$ //양의 부동 소수점 숫자 일치
^- ([1-9]d*.d*|0.d*[1-9]d*)$ //음수 부동 소수점 숫자 일치
^-?([1-9]d*.d*|0. d *[1-9]d*|0?.0+|0)$ //부동 소수점 숫자 일치
^[1-9]d*.d*|0.d*[1-9]d*| 0? .0+|0$ //음수가 아닌 부동 소수점 숫자 일치(양의 부동 소수점 숫자 + 0) 
^(-([1-9]d*.d*|0.d*[1-9 ]d*))| 0?.0+|0$ //양수가 아닌 부동 소수점 숫자와 일치합니다(음수 부동 소수점 숫자 + 0)
^[a-zA-Z][a-zA-Z0-9_]{ 4,15}$ //계좌번호 일치 합법적인가요(문자로 시작, 5~16바이트 허용, 영숫자 밑줄 허용)
^s*|s*$ //앞뒤 공백 문자와 일치하는 정규식
ns* r //빈 줄과 일치하는 정규식
[^x00-xff] //2바이트 문자 일치(한자 포함)
[u4e00-u9fa5] //한자 일치하는 정규식

사용자 이름
^[a-z0- 9_-]{3 ,16}$

비밀번호
^[a-z0-9_-]{6,18}$

16진수 값
^#?([a-f0-9]{6}|[a -f0 -9]{3})$

이메일
^([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6}) $
^[a-zd]+(.[a-zd]+)*@([da-z](-[da-z])?)+(.{1,2}[a-z]+)+ $

URL
^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$

IP 주소
((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[ 01 ]?dd?)

or
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9] ? ).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

HTML 태그
^<([a-z]+)([^<]+)*(?:>(.*)|s+/>)$

위는 정규 표현식에 대한 몇 가지 사항입니다. 기초지식을 실제 사례를 통해 설명하였으니, 정규표현식에 대해 헷갈려하는 학생들에게 도움이 되었으면 좋겠습니다.

관련 질문이 더 필요하시면 PHP 중국어 웹사이트를 방문하세요: PHP 비디오 튜토리얼

위 내용은 정규식의 상세한 기본 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제