>  기사  >  백엔드 개발  >  정규 표현식 (39)

정규 표현식 (39)

WBOY
WBOY원래의
2016-08-08 09:23:23807검색

정규식 소개:

??정규식은 문자 배열 및 일치 패턴을 설명하는 데 사용되는 문법 규칙입니다. 주로 문자열의 패턴 분할, 일치, 검색 및 교체 작업에 사용됩니다. 지금까지 사용한 정확한 (텍스트) 일치도 정규식입니다.
??PHP에서 정규식은 일반적으로 일반 문자와 일부 특수 문자(와일드카드와 유사)로 구성된 텍스트 패턴에 대한 프로그래밍 방식의 설명입니다.

?? PHP에서 정규식에는

?? 일치하는 세 가지 기능이 있으며 문자열 추출과 일치하는 데 자주 사용됩니다. 정보.
??일치하는 텍스트를 새 텍스트로 바꿉니다.
?? 문자열을 더 작은 정보 덩어리로 나눕니다.
??정규 표현식에는 하나 이상의 원자가 포함됩니다

PHP에는 두 세트의 정규 표현식 함수 라이브러리가 있습니다. 둘의 기능은 비슷합니다. , 그러나 실행 효율성은 약간 다릅니다:

?? PCRE(Perl Compatible Regular Expression) 라이브러리에서 한 세트를 제공합니다. 접두사 "preg_"로 명명된 함수
?? POSIX(Portable Operating System Interface of Unix) 확장에서 제공하는 집합입니다. "ereg_" 접두사로 명명된 함수를 사용하세요.
??정규식을 사용하는 이유 중 하나는 일반적인 검색 및 바꾸기 작업에서는 정확한 리터럴만 일치할 수 있고, 동적 텍스트 검색은 어렵거나 심지어 불가능합니다.

정규식의 문법 규칙

PCRE 정규식:
??PCRE의 전체 이름은 다음과 같습니다. Perl 호환 정규식은 Perl이 정규식과 호환된다는 의미입니다.
??PCRE는 Perl 언어에서 파생되었으며 Perl은 문자열 연산에 가장 강력한 언어 중 하나입니다. PHP의 초기 버전은 Perl에서 개발한 제품이었습니다.
??PCRE 구문은 더 많은 기능을 지원하고 POSIX 구문보다 더 강력하며 동일한 기능 기능을 구현하며 PCRE 라이브러리 사용 효율성에 약간의 이점이 있습니다. 하지만 그들은 공통점도 많습니다.
??PCRE에서 패턴 표현식(예: 정규 표현식)은 일반적으로 "/apple/"과 같이 두 개의 백슬래시 "/"로 묶입니다. 사용자는 구분 기호 사이에 일치해야 하는 패턴 내용만 넣으면 됩니다. 구분 문자는 "/"로 제한되지 않습니다. 문자, 숫자, 슬래시("") 이외의 모든 문자는 "#", "|", "!" 등과 같은 구분 기호로 사용할 수 있습니다.

Atom

Atom은 정규식을 구성하는 기본 단위로, 정규식을 분석할 때 전체적으로 다루어야 합니다. .
??원자문자에는 영문자, 숫자, 문장부호 및 기타 기호가 모두 포함됩니다. 원자에는 다음도 포함됩니다.
??단일 문자, 숫자(예: a-z, A-Z, 0-9).
??(ABC)와 같은 패턴 단위는 여러 개의 원자로 구성된 큰 원자로 이해될 수 있습니다.
??[ABC]와 같은 원자 테이블.
??다음과 같은 재사용 패턴 단위: \1
??일반적인 이스케이프 문자, 예: d, D, w
?? 이스케이프 메타 문자(예: *, .

일반적인 이스케이프 문자

원자적 설명
-------------------------------------- -----
d 숫자와 일치합니다. [0-9]
에 해당합니다. D 일치 숫자를 제외한 모든 문자, [^0-9]
w [0-9a-zA-Z_]에 해당하는 영어 문자, 숫자 또는 밑줄과 일치합니다. 🎜>W 영어 문자, 숫자 및 밑줄을 제외한 모든 문자와 일치합니다. [^0-9a-zA-Z_]
s와 동일합니다. 공백 문자와 일치합니다.
S 공백 문자를 제외한 모든 문자와 일치합니다. [^fnrtv]
f와 일치합니다. 폼 피드 문자와 일치합니다. x0c 또는 cL
n과 일치합니다. x0a 또는 cJ
에 해당하는 개행 문자 x0d 또는 cM에 해당하는 캐리지 리턴 문자와 일치
t x09 또는 cl
v 세로 탭 문자와 일치하며 x0b 또는 ck와 동일
oNN 8진수와 일치
xNN 16진수와 일치
cC 제어 문자와 일치
메타 문자(메타 문자)

메타 문자는 정규 표현식을 구성하는 데 사용되는 특별한 의미를 지닌 문자입니다. 정규 표현식에 메타 문자 자체를 포함하려면 이스케이프
메타 문자 설명
------ -- ------------------------------------------------ -- -------
* 0회, 1회 이상이 선행 원자와 일치
+ 1회 이상이 선행 원자와 일치 원자
? 이전 원자와 일치
0 또는 1회 | 두 개 이상의 선택 항목과 일치
^ 또는 A가 시작 부분의 원자와 일치 문자열
$ 또는 Z는 문자열
b의 끝에 있는 원자와 일치합니다.
B라는 단어의 경계와 일치합니다. 단어 경계 이외의 부분과 일치
[] 대괄호 안의 원자와 일치
[^] 대괄호 안의 원자를 제외한 모든 문자와 일치
{m}  앞의 원자가 정확히 m번 등장함을 나타냅니다
{m,n}  앞의 원자가 m번 이상 n번 이상 나타남을 나타냅니다(n>m)
{m,} 는 앞의 원자가 m번 이상 나타나는 것을 나타냅니다.
() 는 원자 전체를 나타냅니다
. 개행 문자를 제외한 모든 문자

문자열 경계 제한

어떤 경우에는 보다 정확한 일치 결과를 위해 일치 범위를 제한해야 합니다. "^" 및 "$"는 각각 문자열의 시작과 끝을 지정합니다.
??예를 들어 문자열에서 "Tom and Jerry는 Tom이 환영받지 못할 때까지 집에서 서로를 쫓았습니다."
??메타 문자 "^" 또는 " A "는 문자열 시작 부분에 배치되어 패턴 일치가 문자열 시작 부분에 나타나도록 합니다.
/^Tom/
?? 메타문자 "$ " 또는 "Z ”는 문자열 끝에서 패턴 일치가 발생하도록 문자열 끝에 배치됩니다.
/in$/
?? 경계 제한 메타 문자를 추가하지 않으면 더 일치하는 결과를 얻을 수 있습니다.
/^Tom$/정확 일치/Tom/퍼지 일치

단어 경계 제한

사용 중 다양한 편집 소프트웨어의 검색 기능을 사용할 때 "단어로 검색"을 선택하면 보다 정확한 결과를 얻을 수 있습니다. 정규식에서도 비슷한 기능을 사용할 수 있습니다.
??예: 문자열 "This island is a beautiful land"
??메타 문자 "b"는 단어의 경계와 일치합니다.
/bisb/는 "is"라는 단어와 일치하지만 "This" 및 "island"와는 일치하지 않습니다.
/bis/는 "island"의 단어 "is" 및 "is"와 일치하지만 "This"는 일치하지 않습니다.
메타 문자 "B"는 일치하지 않음?? 단어 경계 외부.
/BisB/는 단어의 왼쪽 또는 오른쪽 경계와 일치하지 않고 단어 내부만 일치함을 명시적으로 나타냅니다. 따라서 이 예에서는 결과가 없습니다.
/Bis/는 단어 "This"의 "is"와 일치합니다.

반복 일치

정규 표현식 수식에는 "?", "*" 및 "+"와 같이 특정 원자를 반복적으로 일치시키는 데 사용되는 일부 메타 문자가 있습니다. 이들 사이의 주요 차이점은 반복되는 일치 횟수입니다.
?? 메타문자 "?": 바로 앞에 있는 원자가 0개 또는 1개 일치함을 나타냅니다.
예: /colou?r/은 "color" 또는 "color"와 일치합니다.
??메타 문자 "*": 바로 앞에 있는 원자와 일치하는 항목이 0, 1개 이상 있음을 나타냅니다.
예: /zo*/는 z, Zoo와 일치할 수 있습니다
?? 메타문자 "+": 원자 바로 앞에 하나 이상의 일치가 있음을 나타냅니다.
예를 들어 /go+gle/은 "gogle", "google" 또는 "gooogle" 및 중간에 여러 개의 o가 포함된 기타 문자열과 일치합니다.

모든 문자

메타 문자 "."는 개행 문자를 제외한 모든 문자와 일치합니다.
?? [^n](Unix 시스템) 또는 [^rn](Windows 시스템)과 동일합니다.
??예: /pr.y/는 "prey", "pray" 또는 "pr%y" 등의 문자열과 일치할 수 있습니다.
??일반적으로 ".*" 조합을 사용하여 개행 문자를 제외한 모든 문자를 일치시킬 수 있습니다. 일부 책에서는 "전체 일치" 또는 "단일 포함 일치"라고도 합니다.
??예:
??/^a.*z$/는 문자 "a"로 시작하고 문자로 끝나는 모든 항목과 일치할 수 있음을 의미합니다. "z", 개행 문자가 있는 문자열은 제외됩니다.
??/.+/도 유사한 일치 기능을 완성할 수 있지만 차이점은 최소한 하나의 문자와 일치한다는 것입니다.
??/^a.+z$/는 "a%z"와 일치하지만 "az" 문자열과 일치하지 않습니다.

원자 테이블 - 정사각형 대괄호 표현식 수식

원자 테이블 "[]"는 서로 동일하고 그 중 하나만 일치하는 원자 그룹을 저장합니다. "a" 또는 "e"를 일치시키려면 [ae]를 사용하세요.
??예: Pr[ae]y는 "Pray" 또는 "Prey"와 일치합니다.
??원자 테이블 "[^]"(제외된 원자 테이블이라고도 함)은 테이블의 원자를 제외한 모든 문자와 일치합니다.
??예: /p[^u]/는 "part"의 "pa"와 일치하지만 "u"는 일치에서 제외되므로 "computer"의 "pu"는 일치할 수 없습니다.
??원자표 "[-]"는 쓰기를 단순화하기 위해 ASCII 코드 순서로 배열된 원자 그룹을 연결하는 데 사용됩니다.
??예: /x[0123456789]/는 문자 "x"와 숫자로 구성된 문자열을 일치시키는 데 사용되는 x[0-9]로 작성할 수 있습니다.
??예:
??/[a-zA-Z]/ 모든 대문자 및 소문자와 일치
? ?/ ^[a-z][0-9]$/ "z2", "t6", "g7"과 같은 일치
??/0[xX][0-9a-fA- F]/ "0x9"와 같은 간단한 16진수 숫자와 일치합니다.
??/[^0-9a-zA-Z_]/는 영문자, 숫자, 밑줄(W와 동일)을 제외한 모든 문자와 일치합니다.
??/0?[ xX][0-9a-fA-F]+/는 16진수와 일치하며 "0x9B3C" 또는 "X800" 등과 일치할 수 있습니다.
??/<[A-Za-z][A-Za-z0-9]*>/는 "

", ""과 일치할 수 있습니다. "" 및 기타 HTML 태그이며 대소문자를 엄격하게 제어하지 않습니다.

패턴 선택기

메타 문자 "|"를 패턴 선택기라고도 합니다. 정규식에서 두 개 이상의 선택 항목 중 하나와 일치합니다.
??예:
??"There are lot apples and pears."라는 문자열에서 /apple|pear/는 첫 번째 실행에서 "apple"과 일치합니다. "; 다시 실행하면 "배"와 일치합니다. 다음과 같은 옵션을 계속 추가할 수도 있습니다. /apple|pear|banana|lemon/

모드 단위

메타 문자 "( )" 정규식은 원자(또는 패턴 단위)로 사용됩니다. 수학식의 괄호와 유사하게 "()"는 단독으로 하나의 단위로 사용될 수 있습니다.
??예:
??/(Dog)+/는 "Dog", "DogDog", "DogDogDog" 뒤에 "가 오기 때문에 일치합니다. +" 앞의 원자는 메타 문자 "()"로 묶인 문자열 "Dog"입니다.
??/You (very )+ old/는 "You 아주 old", "You 아주 아주 old"와 일치
??/Hello (world|earth)/ "Hello world", "Hello Earth" 매칭
??패턴 단위의 표현식이 먼저 매칭되거나 평가됩니다.

재사용 패턴 단위

시스템이 자동으로 패턴 단위 "()"에 일치하는 항목을 순차적으로 저장하고 필요할 때 사용할 수 있습니다. "1", "2", "3"의 형태로 만들어집니다. 이 방법은 동일한 패턴 단위가 포함된 정규식을 관리하는 데 매우 편리합니다. 사용할 때는 "\1", "\2"
라고 써야 합니다. 예:
??/^d{2}([W ])d{2 }\1d{4}$/ "12-31-2006", "09/27/1996", "86 01 4321" 등과 같은 문자열과 일치합니다. 그러나 위 정규식은 "12/34-5678" 형식과 일치하지 않습니다. 패턴 "[W]"의 결과 "/"가 이미 저장되어 있기 때문입니다. 다음 위치 "1"이 참조될 때 해당 일치 패턴은 "/" 문자이기도 합니다.
??일치하는 결과를 저장할 필요가 없는 경우에는 비저장 패턴 단위 "(?:)"를 사용합니다
??예를 들어 /(? :a|b|c )(D|E|F)\1g/ 는 "aEEg"와 일치합니다. 일부 정규식에서는 비저장 모드 단위를 사용해야 합니다. 그렇지 않으면 후속 참조 순서를 변경해야 합니다. 위의 예는 /(a|b|c)(C|E|F)\2g/로 쓸 수도 있습니다.


위 내용은 정규식(39)에 대한 내용을 포함하여 소개되었으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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