1. 정규식의 정의
2. 정규식의 몇 가지 기본 구문
정규식은 문자열에 대한 연산의 일종입니다. 일반 문자열을 구성하는 특정 문자
예: 위 코드의
<?php $p = '/abc123/'; $str = "abc123bbbb"; if (preg_match($p, $str)) { echo '该字符串符合这个规则'; } ?>
'/abc123/'는 정규식입니다. 여기서 /abc123/은 문자와 숫자로 구성된 문자열입니다. 이지만 이러한 문자에는 고유한 특별한 의미가 있습니다. 예를 들어 정규 표현식 /abc123/의 규칙은 문자열이 abc123으로 시작한다는 것입니다. 이 규칙을 충족하는 모든 문자열은 이 표현식과 일치합니다. 2) 정규식의 몇 가지 기본 구문
1. 일반 일치 패턴은 구분 기호와 메타 문자로 구성됩니다. 구분 기호는 숫자, 백슬래시 또는 공백이 아닌 모든 문자일 수 있습니다. 슬래시(/), 해시 기호(#), 부정 기호(~) 같은 일반적인 구분 기호예:
/hello world/ 표현식의 의미: 문자열이 hello world로 시작합니다
# ^[0-9 ]$# 표현식의 의미: 숫자 0-9~hello~ 표현식의 의미: 문자열에 hello
가 포함되어 있습니다. 코드로 테스트해 보겠습니다
, /hello world/ 의미 표현식은 다음과 같습니다. 문자열은 hello world로 시작합니다
<?php $p = "/hello world/"; $str = "hello world,i am a student"; if (preg_match($p, $str)) { echo '该字符串符合这个规则/hello world/<br/>'; } ?>
실행 결과는 다음과 같습니다.
문자열은 이 규칙을 준수합니다/hello world/문자열을 변경하고 살펴보세요. hello world로 시작하지 않음
<?php $p = "/hello world/"; $str = "helloworld,i am a student"; if (preg_match($p, $str)) { echo '该字符串符合这个规则/hello world/<br/>'; } ?>
실행 결과는 다음과 같습니다.
Blank예 2
,#^[0-9]$# 표현식의 의미는 다음과 같습니다. 0-9의 숫자 일치
<?php $p2 = "#^[0-9]$#"; $str2 = "3"; if (preg_match($p2, $str2)) { echo '该字符串符合这个规则"#^[0-9]$#<br/>'; } ?>
The 실행 결과는 다음과 같습니다.
문자열은 "#^[0-9]$#코드를 변경하고 문자열을 9보다 큰 숫자로 변경합니다. 살펴보세요
<?php $p2 = "#^[0-9]$#"; $str2 = "30"; if (preg_match($p2, $str2)) { echo '该字符串符合这个规则"#^[0-9]$#<br/>'; }else{ echo '该字符串不符合这个规则"#^[0-9]$#<br/>'; } ?>
실행 결과 is :
이 문자열은 이 규칙을 준수하지 않습니다."#^[0-9]$#예제 3,
~hello~ 표현식의 의미: 문자열에 hello
가 포함됩니다. 특정 코드는 다음과 같습니다.
<?php $p3 = "~hello~"; $str3 = "ahellobb"; if (preg_match($p3, $str3)) { echo '该字符串符合这个规则:~hello~'; }else{ echo '该字符串不符合这个规则:~hello~'; } ?>
이제 hello를 포함하지 않도록 테스트 문자열을 변경합니다
특정 코드는 다음과 같습니다.
<?php $p3 = "~hello~"; $str3 = "hell o"; if (preg_match($p3, $str3)) { echo '该字符串符合这个规则:~hello~'; }else{ echo '该字符串不符合这个规则:~hello~'; } ?>
실행 결과는 다음과 같습니다.
이 문자열은 ~hello~다음에서 볼 수 있습니다.
1 /는 시작을 의미합니다
2. ^
3. $는 $
앞의 문자로 끝나는 것을 의미합니다. 4. ~는 포함을 의미합니다.2. 패턴에 구분 기호가 포함되어 있으면 백슬래시()를 사용하여 구분 기호를 이스케이프해야 합니다.
예:
/https://www./
는 https://www.로 시작한다는 의미입니다. 구체적인 코드는 다음과 같습니다.
<?php $p = "/https:\/\/www./"; $str = "https://www.baidu.com"; if (preg_match($p, $str)) { echo '该字符串符合这个规则:/https:\/\/www./'; }else{ echo '该字符串不符合这个规则:/https:\/\/www./'; }실행 결과는 다음과 같습니다.
이 문자열 / https://www./
문자열을
https://www로 시작하지 않도록 변경해 보세요.
<?php $p = "/https:\/\/www./"; $str = "http://www.baidu.com"; if (preg_match($p, $str)) { echo '该字符串符合这个规则:/https:\/\/www./'; }else{ echo '该字符串不符合这个规则:/https:\/\/www./'; }를 살펴보세요. 실행 결과는 다음과 같습니다.
이 문자열 /https ://www./
3. 패턴에 구분 문자가 많이 포함된 경우 다른 문자를 구분 기호로 바꾸는 것이 좋습니다. 또는 preg_quote를 사용하여 이스케이프할 수 있습니다.
예 1,
<?php $p = "/https://www.baidu.com/a/b/index.html/"; $str = "http://www.baidu.com/a/b/index.html"; if (preg_match($p, $str)) { echo '该字符串符合这个规则:/https://www.baidu.com/a/b/index.html/'; }else{ echo '该字符串不符合这个规则:/https://www.baidu.com/a/b/index.html/'; }실행 결과는 다음과 같습니다.
경고: preg_match(): Unknown modifier '/' in D:E-classclass-codeclassingindex.php on line 7
이 문자열은 다음을 준수하지 않습니다. 이 규칙 :/https://www.baidu.com/a/b/index.html/구체적인 코드는
지금은 직접 작성할 수 없습니다. / 위와 같이 이스케이프하거나 다음과 같이 진행하세요
<?php $p = "https://www.baidu.com/a/b/index.html"; $p = '/'.preg_quote($p, '/').'/'; $str = "https://www.baidu.com/a/b/index.html"; if (preg_match($p, $str)) { echo '该字符串符合这个规则:/https://www.baidu.com/a/b/index.html/'; }else{ echo '该字符串不符合这个规则:/https://www.baidu.com/a/b/index.html/'; } ?>실행 결과는 다음과 같습니다.
문자열은 다음 규칙을 따릅니다. /https://www.baidu.com/a/b/index.html/
4. 구분 기호 뒤에 사용되며 패턴 수정자에는 i, m, s 등이 포함됩니다.
요약:
1. i는 대소문자를 무시할 수 있음을 의미합니다.
사례 1,
연습 목표:
1. 이는 대소문자를 무시할 수 있음을 의미합니다.<?php $p = "/ABc/i"; $str = "abc"; if (preg_match($p, $str)) { echo '该字符串符合这个规则:/ABc/i'; }else{ echo '该字符串不符合这个规则:/ABc/i'; } ?>실행 결과는 다음과 같습니다.
문자열은 다음 규칙을 따릅니다: /ABc/i
사례 2,
연습 목표:
1.m은 여러 줄 일치를 나타냅니다. 구체적인 코드는 다음과 같습니다.<?php $p = "/chinese/m"; $str = "i am a chinese people,\n you alose is a chinese people"; $math = ""; if (preg_match_all($p, $str,$math)) { echo '该字符串符合这个规则:/chinese/m,匹配结果为:'; print_r($math); }else{ echo '该字符串不符合这个规则:/chinese/m'; } ?>실행 결과는 다음과 같습니다.
문자열은 다음 규칙을 따릅니다: /chinese/m 일치 결과는 다음과 같습니다: Array ( [0] => Array ( [0] => Chinese [1] => Chinese ) )
여기서 preg_match_all을 사용해야 한다는 점에 유의해야 합니다. 그렇지 않으면 preg_match가 한 줄만 일치
接下来我们运行下效果
<?php $p = "/chinese/m"; $str = "i am a chinese people,\n you alose is a chinese people"; $math = ""; if (preg_match($p, $str,$math)) { echo '该字符串符合这个规则:/chinese/m,匹配结果为:'; print_r($math); }else{ echo '该字符串不符合这个规则:/chinese/m'; } ?>运行结果为:
该字符串符合这个规则:/chinese/m,匹配结果为:Array ( [0] => chinese )
其实/m在此也算多此一举,因为preg_match_all就是表示多行匹配了
<?php $p = "/chinese/"; $str = "i am a chinese people,\n you alose is a chinese people"; $math = ""; if (preg_match_all($p, $str,$math)) { echo '该字符串符合这个规则,匹配结果为:'; print_r($math); }else{ echo '该字符串不符合这个规则'; } ?>运行结果其实是一样的,结果为:
该字符串符合这个规则,匹配结果为:Array ( [0] => Array ( [0] => chinese [1] => chinese ) )
只是要知道m表示多行匹配的意思
案例三、
实践目标:
1、如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。
具体代码如下:
<?php $p = "/chinese ./s"; $str = "i am a chinese \n people, you alose is a chinese good people"; $math = ""; if (preg_match_all($p, $str,$math)) { echo '该字符串符合这个规则,匹配结果为:'; print_r($math); }else{ echo '该字符串不符合这个规则'; } ?>运行结果如下:
该字符串符合这个规则,匹配结果为:Array ( [0] => Array ( [0] => chinese [1] => chinese g ) )
说明第一个chinese 后面的字符是换行也匹配到了,这说明了s的意思就是.要包含换行符,接下来
我们去掉s,看下最终的结果
<?php $p = "/chinese ./"; $str = "i am a chinese \n people, you alose is a chinese good people"; $math = ""; if (preg_match_all($p, $str,$math)) { echo '该字符串符合这个规则,匹配结果为:'; print_r($math); }else{ echo '该字符串不符合这个规则'; } ?>运行结果如下:
该字符串符合这个规则,匹配结果为:Array ( [0] => Array ( [0] => chinese g ) )
说明此刻只匹配到一个了,因为.不包含换行符,所以第一个chinese没有匹配到
总结:
本文主要讲解了
1、正则表达式的定义
2、正则表达式的几个基本语法
위 내용은 PHP의 정규식에 대한 자세한 설명(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!