>  기사  >  백엔드 개발  >  PHP 정규 표현식

PHP 정규 표현식

不言
不言원래의
2018-04-24 14:37:2559686검색

이 기사에서는 특정 참조 값이 있는 PHP에 대한 정규 표현식을 소개합니다. 이제 모든 사람과 공유합니다. 필요한 친구가 참조할 수 있습니다.

PHP 정규 표현식

정규 표현식은 문자열 결과에 대한 설명입니다. 구문 규칙은 특정합니다. 일치하는 문자열을 일치시키고, 바꾸고, 가로챌 수 있는 형식 지정 패턴입니다. 일반적으로 사용되는 언어에는 기본적으로 JavaScript, Java 등 정규 표현식이 있습니다. 사실, 한 언어의 일반적인 사용법을 이해하는 한, 다른 언어의 일반적인 규칙을 사용하는 것은 비교적 간단합니다. 좋아요, 규칙적인 규칙을 작성해 보겠습니다.

관련 권장사항:
1. 정규식 구문 튜토리얼(온라인 테스트 도구 포함)
2. PHP 정규식 빠른 소개 비디오 튜토리얼

정규식이 문자열과 일치하는 경우 다음 2가지 기본 원칙을 따르세요. 1. 가장 왼쪽 원칙: 정규 표현식은 항상 대상 문자열의 가장 왼쪽부터 시작하여 표현식 요구 사항을 충족하는 부분이 일치하거나 대상 문자열의 끝이 일치할 때까지 순서대로 일치합니다.

2. 가장 긴 원칙: 일치하는 대상 문자열의 경우 정규식은 항상 정규식의 요구 사항, 즉 그리디 모드를 충족하는 가장 긴 부분과 일치합니다.



그래서 시작하는 방법은 먼저 구분 기호부터 시작하세요. 작성할 때 일반적으로 일련의 정규식의 시작을 나타내는 데 사용되는 / ; #; 예: '/a.*a/'. 표현에 이스케이프 문자가 너무 많으면 url;

$str = 'http://baidu.com';
$pattern = '/http:\/\/.*com/';//需要转义/
preg_match($pattern,$str,$match);
var_dump( $match);
$str = 'http://baidu.com';
$pattern = '#http://.*com#';//不需要转义/
preg_match($pattern,$str,$match);
var_dump( $match);

처럼 #을 먼저 사용하는 것이 좋습니다. 이제 시작과 끝을 어떻게 쓰는지 알았으니 다음 단계는 중간을 판단하는 것입니다. 정규식은 원자와 메타 문자를 사용하여 왼쪽에서 오른쪽으로 이어집니다.

예를 들어 'a4b561c25d9afb9ac8dc4d70affff419zxcv0d36329ec37a2cc24d42c7229b69747a', 일치하는 경우 '/a4b561c25d9afb9ac8dc4d70affff419.*0d36329ec37a2cc24d42c7229b69747a/', 여기서 .*는 zxcv를 나타냅니다.

그럼 공통 원자와 메타문자는 무엇인가요?

d은 숫자와 일치합니다. [0-9]와 동일합니다.
D은 숫자가 아닌 문자와 일치합니다. [^0-9]와 동일합니다.
f은 폼 피드와 일치합니다. x0c 및 cL과 동일합니다.
n은 개행 문자와 일치합니다. x0a 및 cJ와 동일합니다.
r은 캐리지 리턴 문자와 일치합니다. x0d 및 cM과 동일합니다.
s 공백, 탭, 폼 피드 등을 포함한 모든 공백 문자와 일치합니다. [fnrtv]와 동일합니다.
S은 공백이 아닌 모든 문자와 일치합니다. [^ fnrtv]와 동일합니다.
t은 탭 문자와 일치합니다. x09 및 cI와 동일합니다.
v은 세로 탭 문자와 일치합니다. x0b 및 cK와 동일합니다.
w 밑줄을 포함한 모든 단어 문자와 일치합니다. '[A-Za-z0-9_]'와 동일합니다.
W은 단어가 아닌 모든 문자와 일치합니다. '[^A-Za-z0-9_]'와 동일합니다.
xn은 n과 일치합니다. 여기서 n은 16진수 이스케이프 값입니다. 16진수 이스케이프 값은 정확히 두 자리 길이여야 합니다. 예를 들어 'x41'은 "A"와 일치합니다. 'x041'은 'x04' 및 '1'과 동일합니다. ASCII 인코딩은 정규식에서 사용할 수 있습니다.
nm8진수 이스케이프 값 또는 역참조를 식별합니다. nm 앞에 최소 nm개의 획득 가능한 하위 표현식이 있는 경우 nm은 역방향 참조입니다. nm 앞에 최소한 n의 획득이 있으면 n은 역방향 참조이고 그 뒤에는 리터럴 m이 옵니다. 이전 조건 중 어느 것도 충족되지 않고 n과 m이 모두 8진수(0-7)인 경우 nm은 8진수 이스케이프 값 nm과 일치합니다.
nmln이 8진수(0-3)이고 m과 l이 모두 8진수(0-7)인 경우 8진수 이스케이프 값 nml과 일치합니다.

un16진수로 표현되는 유니코드 문자. 예를 들어 u00A9는 저작권 기호(?)와 일치합니다.

. "n"을 제외한 모든 단일 문자와 일치합니다.

^ 입력 문자열의 시작 부분과 일치합니다. 문자 필드 []에서는 '[^w]'가 'w'와 같고 ^w는 단어 문자로 시작하는 것과 같은 부정을 의미합니다.

$ 입력 문자열의 끝 위치와 일치합니다. 예를 들어 'w$'는 단어 문자로 끝나는 것을 의미합니다.

? {0,1}에 해당하는 이전 하위 표현식 0 또는 1회 와 일치합니다. 예를 들어 "do(es)?"는 "do" 또는 "does"와 일치할 수 있습니다.

* 이전 하위 표현식과 0회 이상 일치하며 {0,}와 동일합니다. 예를 들어 zo*는 "z", "zo", 'zoo'와 일치합니다.

+ 이전 하위 표현식과 한 번 이상 일치합니다. 예를 들어 'zo+'는 "zo" 및 "zoo"와 일치할 수 있습니다.

{n} n은 음이 아닌 정수이며 n번 일치합니다. 예를 들어 'o{2}'는 "Bob" 또는 'Booob'과 일치하지 않지만 "food"에 있는 두 개의 o와 일치합니다.

{n,} n은 음수가 아닌 정수입니다. n번 이상 일치합니다. 예를 들어, 'o{2,}'는 "Bob"의 'o'와 일치하지 않지만 "foooood"의 모든 o와 일치합니다. 'o{1,}'는 'o+'와 동일합니다. 'o{0,}'는 'o*'와 동일합니다.

{n,m} m과 n은 모두 음수가 아닌 정수입니다. 여기서 n <= m입니다. 최소 n회, 최대 m회 일치합니다. 예를 들어, "o{1,3}"은 "fooooood"의 처음 세 개의 o와 일치합니다. 'o{0,1}'은 'o?'와 동일합니다. 쉼표와 두 숫자 사이에는 공백이 있어서는 안 됩니다.

[] 문자 세트(문자 필드). 포함된 문자 중 하나와 일치합니다. 예를 들어 '[abc]'는 "plain"의 'a'와 일치합니다.

() () 안의 내용과 일치하여 이 일치 항목을 얻습니다. n(n은 1보다 큰 정수)에서 '(w+) (:)//.*1' 표현식이 있는 경우 'http://baidu.com'은 'http://baidu.comhttp',1과 일치합니다. http를 나타냅니다.

(?:)은 일치하지만 일치하는 결과를 얻지 못하며 나중에 사용하기 위해 저장하지 않습니다. 이는 "or" 문자(|)를 사용하여 패턴의 일부를 결합할 때 유용합니다. 예를 들어 'industr(?:y|ies)는 'industry|industries'보다 짧은 표현입니다. 위의 수식을 '(?:w+)(:)//.*1'로 바꾸면 1은 다음과 같이 표현됩니다.

• |        x|y,匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

• [-]     字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。

• (?=pattern)正 向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹       配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配    "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹      配的搜索,而不是从包含预查的字符之后开始。
• (?!pattern)负 向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不     需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows    2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜         索,而不是从包含预查的字符之后开始

有时候最后定界符会有一个字母,如‘/as.*/i’,那这个i又是什么呢,这就是模式修正符;

i表示在和模式进行匹配进不区分大小写
m将模式视为多行,使用^和$表示任何一行都可以以正则表达式开始或结束
s如果没有使用这个模式修正符号,元字符中的"."默认不能表示换行符号,将字符串视为单行
x表示模式中的空白忽略不计
e正则表达式必须使用在preg_replace替换字符串的函数中时才可以使用(讲这个函数时再说)
A以模式字符串开头,相当于元字符^
Z以模式字符串结尾,相当于元字符$

U正则表达式的特点:就是比较“贪婪”,使用该模式修正符可以取消贪婪模式

       例:

$str = &#39;asddadsdasd&#39;;
        $pattern = &#39;/a.*d/&#39;;
        preg_match($pattern,$str,$match);
        var_dump($match) ;//asddadsdasd;
       $str = &#39;asddadsdasd&#39;;                                  
        $pattern = &#39;/a.*d/U&#39;;//$pattern = &#39;/a.*?d/&#39;;
        preg_match($pattern,$str,$match);
        var_dump($match) ;//asd

php常用正则函数;

    匹配:preg_match()与preg_match_all()

        1  preg_match($pattern,$subject,[array &$matches])
        2  preg_match_all($pattern,$subject,array &$matches)

      1只会匹配一次,2会把所有符合的字符串都匹配出来,并且放置到matches数组中,而且这两个函数都有一个整形的返回          值。1是一维数组,2是二维数组

替换:preg_replace()

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement进行替换。

相关推荐:

PHP正则表达式分享

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

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