이 글은 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";
은 "/"를 이스케이프하지 않습니다.
!$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";
}
* 0의 배수를 나타냅니다.
+ 1의 배수를 나타냅니다.
¤ 캐럿
^:
> 부정(의미는 포함되지 않음) - "역선택"
> (/^n/i는 n으로 시작함을 의미합니다).
우리는 종종 "" "이스케이프 문자"라고 부릅니다. ".", "/"
Wildcards(lookarounds)와 같은 일부 특수 기호를 이스케이프하는 데 사용됩니다. 특정 문자열에 특정 문자가 있는지 여부를 확인합니다!
Lookaround는 Lookaheads(앞으로 미리보기 ?=)와 Lookbehinds(역방향 미리보기?<=)의 두 가지 유형으로 나뉩니다.
> 형식:
정방향 조회: (?=) 해당(?!)는 부정적인 의미를 의미합니다.
역방향 조회 확인: (? <=) 해당(?
뒤에 문자
$regex = '/(?<=c)d(?=e)/'; /* d 前面紧跟c, d 后面紧跟e*/ $str = 'abcdefgk'; $matches = array(); if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
부정적인 의미:
$regex = '/(?<!c)d(?!e)/'; /* d 前面不紧跟c, d 后面不紧跟e*/ $str = 'abcdefgk'; $matches = array(); if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
>字符宽度:零
验证零字符代码
$regex = '/HE(?=L)LO/i'; $str = 'HELLO'; $matches = array(); if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
打印不出结果!
$regex = '/HE(?=L)LLO/i'; $str = 'HELLO'; $matches = array(); if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
能打印出结果!
说明:(?=L)意思是HE后面紧跟一个L字符。但是(?=L)本身不占字符,要与(L)区分,(L)本身占一个字符。
捕获数据
没有指明类型而进行的分组,将会被获取,供以后使用。
> 指明类型指的是通配符。所以只有圆括号起始位置没有问号的才能被捕捉。
> 在同一个表达式内的引用叫做反向引用。
> 调用格式: \编号(如\1)。
$regex = '/^(Chuanshanjia)[\w\s!]+\1$/'; $str = 'Chuanshanjia thank Chuanshanjia'; $matches = array(); if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
> 避免捕获数据
格式:(?:pattern)
优点:将使有效反向引用数量保持在最小,代码更加、清楚。
>命名捕获组
格式:(?P<组名>) 调用方式 (?P=组名)
$regex = '/(?P<author>chuanshanjia)[\s]Is[\s](?P=author)/i'; $str = 'author:chuanshanjia Is chuanshanjia'; $matches = array(); if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
运行结果
惰性匹配(记住:会进行两部操作,请看下面的原理部分)
格式:限定符?
原理:"?":如果前面有限定符,会使用最小的数据。如“*”会取0个,而“+”会取1个,如过是{3,5}会取3个。
先看下面的两个代码:
代码1.
<?php $regex = '/heL*/i'; $str = 'heLLLLLLLLLLLLLLLL'; if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
结果1.
代码2
<?php $regex = '/heL*?/i'; $str = 'heLLLLLLLLLLLLLLLL'; if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
结果2
代码3,使用“+”
<?php $regex = '/heL+?/i'; $str = 'heLLLLLLLLLLLLLLLL'; if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
结果3
代码4,使用{3,5}
<?php $regex = '/heL{3,10}?/i'; $str = 'heLLLLLLLLLLLLLLLL'; if(preg_match($regex, $str, $matches)){ var_dump($matches); } echo "\n";
结果4
正则表达式的注释
格式:(?# 注释内容)
用途:主要用于复杂的注释
贡献代码:是一个用于连接MYSQL数据库的正则表达式
$regex = '/ ^host=(?<!\.)([\d.]+)(?!\.) (?#主机地址) \| ([\w!@#$%^&*()_+\-]+) (?#用户名) \| ([\w!@#$%^&*()_+\-]+) (?#密码) (?!\|)$/ix'; $str = 'host=192.168.10.221|root|123456'; $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 중국어 웹사이트의 기타 관련 기사를 참조하세요!