PHP - PCRE 정규식 이스케이프 시퀀스(백슬래시)

伊谢尔伦
풀어 주다: 2016-11-21 17:26:38
원래의
1356명이 탐색했습니다.

백슬래시는 다양한 방법으로 사용될 수 있습니다. 첫째, 영숫자가 아닌 문자가 뒤에 오면 해당 문자가 나타내는 특별한 의미를 취소합니다. 백슬래시를 이스케이프 문자로 사용하는 것은 문자 클래스 내부와 외부 모두에서 가능합니다.

예를 들어 "*" 문자를 일치시키려면 패턴에 "*"를 써야 합니다. 이는 문자가 탈출하지 않고도 특별한 의미를 가질 때 적용됩니다. 그러나 영숫자가 아닌 문자의 경우 원래 텍스트에서 일치해야 할 때 문자 자체를 나타냄을 선언하기 위해 문자 앞에 백슬래시를 추가하는 것이 항상 안전합니다. 백슬래시를 일치시키려면 패턴에 "\"를 사용하세요.

참고:

백슬래시는 작은따옴표 문자열과 큰따옴표 문자열에서 특별한 의미를 가지므로 백슬래시를 일치시키려면 패턴을 "\\" 로 작성해야 합니다. 번역 주석: "/\/", 우선 문자열로 사용되며 백슬래시가 이스케이프됩니다. 그런 다음 이스케이프된 결과는 //입니다. 이는 정규식 엔진에서 얻은 패턴이며 정규식은 엔진도 이스케이프 태그로 간주되며 구분 기호 /를 이스케이프 처리하고 오류가 발생하므로 하나의 백슬래시와 일치하려면 4개의 백슬래시가 필요합니다.

PCRE_EXTENDED 옵션을 사용하여 패턴을 컴파일하면 패턴의 공백 문자(문자 클래스 제외)와 이스케이프 처리되지 않은 #부터 줄 끝까지의 모든 문자가 무시됩니다. 이 경우 공백 문자나 #을 사용하려면 이스케이프해야 합니다.

백슬래시의 두 번째 사용은 인쇄되지 않는 문자의 표시되는 인코딩을 제어하는 ​​수단을 제공합니다. 이진수 0이 패턴을 종료한다는 점을 제외하면 인쇄되지 않는 문자 자체의 발생에 대한 엄격한 제한은 없습니다. 그러나 텍스트 편집기를 사용하여 패턴을 준비하는 경우 이진 문자를 사용하는 것보다 다음 이스케이프 시퀀스를 사용하는 것이 좋습니다. 더 쉬워집니다.

a

링 문자(16진수 07)

cx

"control-x", x는 임의의 문자입니다

e

이스케이프(16진수 1B)

f

폼 피드(16진수 0C)

n

줄 바꿈(16진수 0A)

p{xx}

xx 속성에 부합하는 문자

P{xx}

xx 속성에 부합하지 않는 문자

r

캐리지 Enter(16진수 0D)

t

가로 탭 문자(16진수 09)

xhh

hh 16진수 인코딩 문자

ddd

ddd 8진수 인코딩 문자 또는 역참조

cx의 정확한 효과는 다음과 같습니다. x가 소문자인 경우 변환됩니다. 대문자로. 다음으로 문자의 6번째 비트(16진수 40, 오른쪽에서 첫 번째 비트가 비트 0)를 반전합니다. 예를 들어, cz는 16진수에서 1A가 되고, c{는 16진수에서 3B가 되며, c는 16진수에서 7B가 됩니다.

"x" 뒤에 16진수 두 개를 읽습니다(문자는 대문자 또는 소문자일 수 있음). UTF-8 모드에서는 "x{...}"가 허용되며 중괄호 안의 내용은 16진수 유효 숫자입니다. 주어진 16진수를 UTF-8 문자 코드로 해석합니다. 원래 16진수 이스케이프 시퀀스 xhh는 해당 값이 127

in"보다 큰 경우 더블바이트 UTF-8 문자와 일치합니다.

수평이 아닌 공백 문자(PHP 5.2.4부터)

s

공백이 아닌 모든 문자

S

공백 문자

v

모든 세로 공백 문자(PHP 5.2.4부터)

V

모든 세로가 아닌 공백 문자(PHP 5.2.4부터) 4)

w

모든 단어 문자

W

모든 비단어 문자

위의 각 이스케이프 시퀀스 쌍은 두 개의 문자를 나타냅니다. 전체 문자 세트의 문자 분리된 부분의 경우 모든 문자는 그 중 하나와 확실히 일치하며 다른 문자와는 절대 일치하지 않습니다.

단어 문자는 문자, 숫자, 밑줄을 모두 의미합니다. 즉, Perl 단어를 구성할 수 있는 모든 문자입니다. 문자와 숫자의 정의는 PCRE 문자 테이블을 통해 제어되며, 로케일 설정을 지정하여 일치하도록 변경할 수 있습니다. 예를 들어, 프랑스(fr) 로케일에서 128 이상의 일부 문자 코드는 w 와 일치할 수 있는 악센트 문자에 사용됩니다.

이러한 문자 클래스 시퀀스는 문자 클래스 내부 또는 외부에 나타날 수 있습니다. 이는 그들이 나타내는 문자 유형 내에서 한 번에 하나의 문자와 일치합니다. 현재 일치 지점이 대상 문자열의 끝에 있으면 일치할 문자가 남아 있지 않기 때문에 그 안에 있는 모든 문자가 일치하지 못합니다.

백슬래시의 네 번째 용도는 몇 가지 간단한 주장입니다. 어설션은 특정 위치에서 일치해야 하는 조건을 지정하며 대상 문자열의 문자를 사용하지 않습니다. 다음으로 하위 그룹을 사용하는 더 복잡한 어설션에 대해 논의하겠습니다. 백슬래시 어설션에는 다음이 포함됩니다.

b

단어 경계

B

비단어 경계

A

대상의 시작 위치(여러 줄 모드와 무관)

Z

대상의 끝 위치 또는 끝의 개행 문자(여러 줄 모드와 무관)

z

타겟의 끝 위치(여러 줄 모드와 무관)

G

타겟의 첫 번째 일치 위치

이러한 어설션은 나타날 수 없습니다. 문자 클래스에서(그러나 "b"는 문자 클래스에서 다른 의미를 가집니다. 이는 백스페이스 문자를 나타냅니다.

단어 경계는 현재 문자가 대상 문자열의 이전 문자와 다른 경우를 나타냅니다. w 또는 W(하나는 w와 일치하고 다른 하나는 W와 일치) 또는 현재 문자가 문자열의 시작 또는 끝 문자로 w와 일치합니다.

A, Z, z 어설션은 항상 대상 문자열의 시작과 끝과 일치하고 패턴 수정자에 의해 제한되지 않는다는 점에서 기존 ^ 및 $(아래 참조)와 다릅니다. PCRE_MULTILINE, PCRE_DOLLAR_ENDONLY 옵션의 영향을 받지 않습니다. Z와 z의 차이점은 문자열의 끝 문자가 개행 문자인 경우 Z는 이를 문자열의 끝으로 일치시키는 반면 z는 문자열의 끝과만 일치한다는 것입니다.

G $offset 매개변수가 지정된 preg_match() 호출에서 현재 일치하는 위치가 일치하는 시작점에 있는 경우에만 성공한다고 가정합니다. $offset 값이 0이 아닌 경우 A와 다릅니다. 번역 참고: A와의 또 다른 차이점은 preg_match_all()을 사용할 때 G가 일치할 때마다 그것이 일치하는 결과의 시작 위치인지 여부만 주장하는 반면, A는 일치하는 결과의 시작 위치가 시작에 있는지 여부를 주장한다는 것입니다. 대상 문자열의.

PHP 4.3.3부터 Q와 E를 사용하여 패턴의 정규식 메타 문자를 무시할 수 있습니다. 예: w+Q.$.E$는 하나 이상의 단어 문자와 일치하고 그 뒤에 마침표, $, 마침표가 오고 마지막으로 문자열 끝에 고정됩니다.

PHP 5.2.4부터. K는 매칭을 재설정하는 데 사용될 수 있습니다. 예를 들어 footKbar는 "footbar"와 일치합니다. 그러나 일치하는 결과는 "bar"입니다. 그러나 K를 사용해도 하위 그룹 내의 콘텐츠는 방해되지 않습니다. 예를 들어 (foot)Kbar가 "footbar"와 일치하면 첫 번째 하위 그룹의 결과는 여전히 "foo"입니다. 역자 주: 부분군에 배치된 K와 부분군 외부에 배치된 K의 효과는 동일합니다.


관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!