Latest web development tutorials

정규 표현식 - 일치하는 규칙

기본 패턴 매칭

모든 기초로 시작합니다. 패턴은 정규 표현식 문자 그룹의 설명 문자열을 특징으로 가장 기본적인 요소입니다. 모드는 매우 복잡 할 수 있으며, 통상의 문자열로 이루어지는 매우 단순 할 수 있으며, 종종 반복 특수 문자와 문자의 범위를 나타내고, 또는 컨텍스트를 나타낸다. 예를 들면 :

^once

이 모델은 패턴은 문자열로 시작하는 일단 일치하는지 나타내는 특수 문자 ^이 포함되어 있습니다. 예를 들어, 패턴 문자열은 "한 번 시간에"경기는 "한 번 뉴욕에서 한 남자가 있었다"일치하지 않습니다. 이러한 ^ 심볼 동일의 시작을 알 수 있듯이, $ 기호는 주어진 모드의 끝에서 그 문자열을하였습니다.

bucket$

"양동이에이 현금을 모두 유지"모델과는 일치는 "버킷"와 일치하지 않습니다. 동시에 사용할 때 ^ 및 $ 문자가 정확히 일치하는 (같은 문자열 모드)를 나타냅니다. 예를 들면 :

^bucket$

단지 문자열 "양동이"와 일치합니다. 모델은 ^와 $를 포함하지 않는 경우 패턴과 일치하는 문자열을 포함한다. 예를 들면 다음과 같습니다 모드

once

문자열

There once was a man from NewYork
Who kept all of his cash in a bucket.

경기.

이 모드에서 문자 (한 번) 즉, 그들은 문자 자체가 그림이 동일 말했다 리터럴 문자입니다. 같은 문장과 흰색 문자 (공백, 탭 등)와 같은 일부 다른 약간 더 복잡한 문자는 이스케이프 시퀀스를 사용합니다. 모든 이스케이프 시퀀스는 백 슬래시 (\)로 시작. 순서를 탈출 탭입니다 : \의 t. 우리가 탭으로 시작하는 문자열,이 모드를 사용할 수 있는지 여부를 테스트하려는 경우 그래서 :

^\t 

마찬가지로, \ n "새 줄", \ r에 캐리지 리턴으로 표현. 다른 특수 기호 등등. \ 표현으로. 예 : \\와 백 슬래시 자체로 백 슬래시 앞에 기간을 밝혔다 사용될 수 있습니다.

문자 클러스터

인터넷에서 프로그램은, 정규 표현식은 종종 사용자 입력의 유효성을 검사하는 데 사용됩니다. 사용자가 다음 양식을 제출하면, 전화 사용자가 판단 할 번호, 주소, 이메일 주소를 입력하고, 신용 카드 번호가 문자에 기초하여 일반 문자 유효한 것은 충분하지 않다.

그래서, 문자 클러스터이며, 우리의 방법을 설명하는 여유 모델을 사용한다. 모든 모음 클러스터의 문자 표현을 만들려면 대괄호 모음 문자를 모두 넣어 :

[AaEeIiOoUu]

이 패턴은 모든 모음의 문자와 일치,하지만 문자를 나타냅니다. 하이픈과 같은 문자의 범위를 나타낼 수 있습니다 :

[a-z] //匹配所有的小写字母 
[A-Z] //匹配所有的大写字母 
[a-zA-Z] //匹配所有的字母 
[0-9] //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 
[ \f\r\t\n] //匹配所有的白字符

마찬가지로, 이들에만 문자 표현이 매우 중요하다. 당신은 소문자와 하나의 "Z2", "T6"또는 "G7"같은 번호의 하나의 문자열로,하지만 "AB2", "r2d3"또는 "B52"를 일치시킬 경우,이 패턴을 사용 :

^[a-z][0-9]$

상기 범위의 26 글자 대신에 [AZ], 그러나 여기가 있지만 첫 번째 문자는 소문자 문자열 일치합니다.

전술 한 바와 같이 ^ 문자열의 시작을 나타내고 있지만, 또 다른 의미를 갖는다. 대괄호 세트에서 사용될 때 ^ 종종 문자를 제거하는 데, "아니오"또는 "제외"수단을 의미한다. 또한, 이전 예제를 사용하여, 우리는 첫 번째 문자가 숫자 수 없습니다 질문

^[^0-9][0-9]$

이 모드 "및 5", "G7"및 "-2"일치하지만, "12"과 "66"는 일치하지 않다. 다음은 제외 특정 문자의 몇 가지 예입니다 :

[^a-z] //除了小写字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

특수 문자 "."(점, 마침표) 모든 문자의 "새 라인"에 추가를 나타 내기 위해 사용되는 정규 표현식. 그래서 패턴 "^ .5 $"와 숫자 5의 끝과 시작 부분에 다른 비 "새 라인"문자에 일치하는 문자열에 대한 두 문자. 모드. ""빈 문자열뿐만 아니라, 모든 문자열과 일치하고 만 포함되어 있습니다 "새로운 라인"문자열을.

다음과 같이 PHP 정규 표현식 일부 내장 된 범용 문자 클러스터 목록입니다 :

字符簇 描述
[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何空白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

확인을 반복

지금까지, 당신은 이미 문자 나 숫자와 일치하는 방법을 알고 있지만, 더 많은 경우에, 당신은 단어 나 숫자 세트와 일치 할 수 있습니다. 단어는 글자의 수, 홀수의 여러 인물의 그룹이있다. 중괄호 클러스터 뒤에 문자 또는 문자 ({}) 앞 콘텐츠 반복 수를 결정하는 데 사용된다.

字符簇 描述
^[a-zA-Z_]$ 所有的字母和下划线
^[[:alpha:]]{3}$ 所有的3个字母的单词
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于两个a的字符串
^a{2,} 如:aardvark和aaab,但apple不行
a{2,} 如:baad和aaa,但Nantucket不行
\t{2} 两个制表符
.{2} 所有的两个字符

이러한 예는 세 가지 중괄호 사용에 대해 설명합니다. 숫자 쉼표, {x는,} "는 내용이 배 X 또는 그 이상의 숫자 앞에 표시"를 의미한다; 숫자는, {X}는 "클러스터의 앞에있는 문자 나 문자는 X 시간을 표시"를 의미 두와 쉼표는 숫자를 구분하는 것이 {X, Y} "앞의 컨텐츠는 적어도 Y 배 이하 X 시간 만 나타납니다." 우리는 더 많은 단어 또는 숫자로 모델을 확장 할 수 있습니다 :

^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]*$ //所有的正数 
^\-{0,1}[0-9]{1,}$ //所有的整数 
^[-]?[0-9]+\.?[0-9]+$ //所有的浮点数

마지막 예는 잘 이해되지, 그렇지? 그래서 Kanba : - (. \) (? []) 및 선택적 빼기 기호 모든 하나 이상의 숫자 ([0-9] +)와 소수점 다음에 시작 (^)에서 토크 하나 이상의 숫자 ([0-9] +)에, 그리고 다른 것 ($) 뒤에되지 않습니다. 당신이 알고있는 것 아래에보다 간단한 방법이 사용될 수있다.

"?" "0 (1)의 앞 '또는'콘텐츠 앞에 선택적이다."특수 문자 {0,1} 동일들은 대표 따라서 단지 예로는 다음과 같이 단순화 될 수있다 :

^\-?[0-9]{1,}\.?[0-9]{1,}$

특수 문자 "*"및 {0} 같다, 그들은 모두 "0 또는 앞의 콘텐츠를 더."대표 마지막으로, 문자는 "+"및 {1}와 동일하며, 이것은 "1 위의 콘텐츠를 더"나타내며, 따라서 상기 예는 네 같이 쓸 수있다 :

^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 
^[0-9]+$ //所有的正数 
^\-?[0-9]+$ //所有的整数 
^\-?[0-9]*\.?[0-9]*$ //所有的浮点数

물론, 이것은 근본적 정규식 기술적 복잡성을 감소시키지 않고, 판독하기가 용이 할 수있다.