PHP의 정규식에 대한 간략한 토론

青灯夜游
풀어 주다: 2023-04-04 16:56:01
앞으로
4143명이 탐색했습니다.

이 글은 PHP 정규 표현식에 대해 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

mindmap

아래 사진을 클릭하시면 구체적인 내용을 보실 수 있습니다!

소개#🎜🎜 ## 🎜🎜#정규식은 개발하는 모든 사람이 자주 사용해야 합니다. 요즘에는 javascript, java, .net, php 등 많은 개발 언어에 정규식 응용 프로그램이 있습니다. 오늘은 정규식에 대한 나의 이해를 소개하겠습니다. . 제가 이해한 내용에 대해 모두와 이야기를 나누고 있습니다. 부적절한 내용이 있으면 알려주세요!

알아야 할 용어 - 다음 용어에 대해 얼마나 알고 있나요?

Δ 구분 기호

#🎜🎜 #Δ 문자 필드

Δ 수정자

Δ 한정자

Δ 캐럿

Δ 와일드카드(정방향 조회) , 역방향 미리보기)

Δ 역참조

Δ 게으른 일치

Δ 댓글

Δ 영자 와이드

Positioning

정규식은 언제 사용하나요? 모든 문자 작업에 정규식을 사용하는 것만으로는 충분하지 않습니다. PHP는 일부 측면에서 정규식을 사용하므로 실제로 효율성에 영향을 미칩니다. 복잡한 텍스트 데이터

분석을 접할 때 정규식을 사용하는 것이 더 나은 선택입니다.

Advantages

정규식은 복잡한 문자 연산을 처리할 때 작업 효율성을 향상

할 수 있습니다. 어느 정도

코드 금액을 저장하세요 . 단점

정규식을 사용할 때 복잡한 정규식은 코드의 복잡성을 증가시킵니다.

는 매우

이해하기 어렵다 . 그래서 때로는 정규식 안에 주석을 추가해야 할 때도 있습니다.

일반 모드

¤ 구분 기호는 일반적으로 "/"로 시작하고 끝나며 다음을 사용할 수도 있습니다. "#".

"#"은 언제 사용해야 하나요? 일반적으로 문자열에

및 "/" 문자

가 많은 경우입니다. 해당 문자를 변환해야 하기 때문입니다. uri와 같은 정규 표현식을 사용할 때.

preg_match의 "/" 구분 기호를 사용하는 코드는 다음과 같습니다.

$regex = '/^http:\/\/([\w.]+)\/([\w]+)\/([\w]+)\.html$/i';
$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

$matches[0]에는 전체 패턴과 일치하는 문자열이 포함됩니다.

"#" 구분자를 사용한 코드는 다음과 같습니다. 이때

은 "/"를 이스케이프하지 않습니다.

!

$regex = '#^http://([\w.]+)/([\w]+)/([\w]+)\.html$#i';
$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사
¤ 수식어 : 정규식의 동작을 변경하는 데 사용됩니다.

우리가 본 것('/^http://([w.]+)/([w]+)/([w]+).html/#🎜 🎜#
i

')의 마지막 "i"는 대소문자 무시를 의미하는 수식어입니다. 우리가 자주 사용하는 또 다른 하나는 공백 무시를 의미하는 "x"입니다. 기고 코드:

$regex = '/HELLO/';
$str = 'hello word';
$matches = array();

if(preg_match($regex, $str, $matches)){
    echo 'No i:Valid Successful!',"\n";
}

if(preg_match($regex.'i', $str, $matches)){
    echo 'YES i:Valid Successful!',"\n";
}
로그인 후 복사
¤ 문자 필드: [w] 대괄호로 확장된 부분이 문자 필드입니다.

¤ 한정자: [w]{3,5} 또는 [w]* 또는 [w]+와 같은 기호는 모두 한정자를 나타냅니다. 이제 구체적인 의미가 소개됩니다.


{3,5}는 3~5자를 의미합니다. {3,}는 3자 이상이고, {,5}는 최대 5자이며, {3}은 3자입니다.


* 0의 배수를 나타냅니다.

+ 1의 배수를 나타냅니다.

¤ 캐럿

^:


> 부정(의미는 포함되지 않음) - "역선택"

                 > (/^n/i는 n으로 시작함을 의미합니다).

우리는 종종 "" "이스케이프 문자"라고 부릅니다. ".", "/"

Wildcards(lookarounds)와 같은 일부 특수 기호를 이스케이프하는 데 사용됩니다. 특정 문자열에 특정 문자가 있는지 여부를 확인합니다!

Lookaround는 Lookaheads(앞으로 미리보기 ?=)와 Lookbehinds(역방향 미리보기?<=)의 두 가지 유형으로 나뉩니다.
> 형식:

정방향 조회: (?=) 해당(?!)는 부정적인 의미를 의미합니다.

역방향 조회 확인: (? <=) 해당(?

뒤에 문자

$regex = &#39;/(?<=c)d(?=e)/&#39;;  /* d 前面紧跟c, d 后面紧跟e*/
$str = &#39;abcdefgk&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

부정적인 의미:

$regex = &#39;/(?<!c)d(?!e)/&#39;;  /* d 前面不紧跟c, d 后面不紧跟e*/
$str = &#39;abcdefgk&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

>字符宽度:零

验证零字符代码

$regex = &#39;/HE(?=L)LO/i&#39;;
$str = &#39;HELLO&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

打印不出结果!

$regex = &#39;/HE(?=L)LLO/i&#39;;
$str = &#39;HELLO&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

能打印出结果!

说明:(?=L)意思是HE后面紧跟一个L字符。但是(?=L)本身不占字符,要与(L)区分,(L)本身占一个字符。

捕获数据

没有指明类型而进行的分组,将会被获取,供以后使用。

> 指明类型指的是通配符。所以只有圆括号起始位置没有问号的才能被捕捉。

> 在同一个表达式内的引用叫做反向引用。

> 调用格式: \编号(如\1)。

$regex = &#39;/^(Chuanshanjia)[\w\s!]+\1$/&#39;;    
$str = &#39;Chuanshanjia thank Chuanshanjia&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

> 避免捕获数据

格式:(?:pattern)

优点:将使有效反向引用数量保持在最小,代码更加、清楚。

>命名捕获组

格式:(?P<组名>) 调用方式 (?P=组名)

$regex = &#39;/(?P<author>chuanshanjia)[\s]Is[\s](?P=author)/i&#39;;
$str = &#39;author:chuanshanjia Is chuanshanjia&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

运行结果

惰性匹配(记住:会进行两部操作,请看下面的原理部分)

  格式:限定符?

原理:"?":如果前面有限定符,会使用最小的数据。如“*”会取0个,而“+”会取1个,如过是{3,5}会取3个。

先看下面的两个代码:

代码1.

<?php
$regex = &#39;/heL*/i&#39;;
$str = &#39;heLLLLLLLLLLLLLLLL&#39;;
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

结果1.

代码2

<?php
$regex = &#39;/heL*?/i&#39;;
$str = &#39;heLLLLLLLLLLLLLLLL&#39;;
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

结果2

代码3,使用“+”

<?php
$regex = &#39;/heL+?/i&#39;;
$str = &#39;heLLLLLLLLLLLLLLLL&#39;;
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

结果3

代码4,使用{3,5}

<?php
$regex = &#39;/heL{3,10}?/i&#39;;
$str = &#39;heLLLLLLLLLLLLLLLL&#39;;
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

结果4

正则表达式的注释

格式:(?# 注释内容)

用途:主要用于复杂的注释

贡献代码:是一个用于连接MYSQL数据库的正则表达式

$regex = &#39;/
    ^host=(?<!\.)([\d.]+)(?!\.)                 (?#主机地址)
\|
    ([\w!@#$%^&*()_+\-]+)                       (?#用户名)
\|
    ([\w!@#$%^&*()_+\-]+)                       (?#密码)
(?!\|)$/ix&#39;;

$str = &#39;host=192.168.10.221|root|123456&#39;;
$matches = array();

if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

echo "\n";
로그인 후 복사

特殊字符

特殊字符解释
*0到多次
+1到多次还可以写成{1,}
?0或1次
.匹配除换行符外的所有单个的字符
\w[a-zA-Z0-9_]
\s空白字符(空格,换行符,回车符)[\t\n\r]
\d[0-9]

案例汇总

1、PHP中文匹配

<?php
$str = "PHP编程";
if (preg_match("/([0-9a-zA-Z\x{4e00}-\x{9fa5}]+)/u",$str, $matches)) {
    var_dump($matches);
    echo "\n";
}
로그인 후 복사

 以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!

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

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