>백엔드 개발 >PHP 튜토리얼 >PHP의 정규식에 대한 자세한 설명(코드 예)

PHP의 정규식에 대한 자세한 설명(코드 예)

易达
易达원래의
2020-05-29 21:32:103031검색

이 글의 목표:

1. 정규식의 정의

2. 정규식의 몇 가지 기본 구문

(1) 정규식의 정의

정규식은 문자열에 대한 연산의 일종입니다. 일반 문자열을 구성하는 특정 문자

예: 위 코드의

<?php
$p = &#39;/abc123/&#39;;
$str = "abc123bbbb";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则&#39;;
}
?>

'/abc123/'는 정규식입니다. 여기서 /abc123/은 문자와 숫자로 구성된 문자열입니다. 이지만 이러한 문자에는 고유한 특별한 의미가 있습니다. 예를 들어 정규 표현식 /abc123/의 규칙은 문자열이 abc123으로 시작한다는 것입니다. 이 규칙을 충족하는 모든 문자열은 이 표현식과 일치합니다. 2) 정규식의 몇 가지 기본 구문

1. 일반 일치 패턴은 구분 기호와 메타 문자로 구성됩니다. 구분 기호는 숫자, 백슬래시 또는 공백이 아닌 모든 문자일 수 있습니다. 슬래시(/), 해시 기호(#), 부정 기호(~) 같은 일반적인 구분 기호

예:

/hello world/ 표현식의 의미: 문자열이 hello world로 시작합니다

# ^[0-9 ]$# 표현식의 의미: 숫자 0-9

~hello~ 표현식의 의미: 문자열에 hello


가 포함되어 있습니다. 코드로 테스트해 보겠습니다

예제 1

, /hello world/ 의미 표현식은 다음과 같습니다. 문자열은 hello world로 시작합니다

<?php
$p = "/hello world/";
$str = "hello world,i am a student";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则/hello world/<br/>&#39;;
}

?>

실행 결과는 다음과 같습니다.

문자열은 이 규칙을 준수합니다/hello world/

문자열을 변경하고 살펴보세요. hello world로 시작하지 않음
<?php
$p = "/hello world/";
$str = "helloworld,i am a student";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则/hello world/<br/>&#39;;
}

?>

실행 결과는 다음과 같습니다.

Blank

예 2

,#^[0-9]$# 표현식의 의미는 다음과 같습니다. 0-9의 숫자 일치

<?php
$p2 = "#^[0-9]$#";
$str2 = "3";
if (preg_match($p2, $str2)) {
    echo &#39;该字符串符合这个规则"#^[0-9]$#<br/>&#39;;
}
?>

The 실행 결과는 다음과 같습니다.

문자열은 "#^[0-9]$#


코드를 변경하고 문자열을 9보다 큰 숫자로 변경합니다. 살펴보세요
<?php
$p2 = "#^[0-9]$#";
$str2 = "30";
if (preg_match($p2, $str2)) {
    echo &#39;该字符串符合这个规则"#^[0-9]$#<br/>&#39;;
}else{
    echo &#39;该字符串不符合这个规则"#^[0-9]$#<br/>&#39;;
}
?>

실행 결과 is :

이 문자열은 이 규칙을 준수하지 않습니다."#^[0-9]$#

예제 3,

~hello~ 표현식의 의미: 문자열에 hello

가 포함됩니다. 특정 코드는 다음과 같습니다.

<?php
$p3 = "~hello~";
$str3 = "ahellobb";
if (preg_match($p3, $str3)) {
    echo &#39;该字符串符合这个规则:~hello~&#39;;
}else{
    echo &#39;该字符串不符合这个规则:~hello~&#39;;
}
?>

실행 결과는 다음과 같습니다.

문자열은 다음 규칙을 따릅니다. ~hello~

이제 hello를 포함하지 않도록 테스트 문자열을 변경합니다

특정 코드는 다음과 같습니다.

<?php
$p3 = "~hello~";
$str3 = "hell o";
if (preg_match($p3, $str3)) {
    echo &#39;该字符串符合这个规则:~hello~&#39;;
}else{
    echo &#39;该字符串不符合这个规则:~hello~&#39;;
}
?>

실행 결과는 다음과 같습니다.

이 문자열은 ~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 &#39;该字符串符合这个规则:/https:\/\/www./&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/https:\/\/www./&#39;;
}

실행 결과는 다음과 같습니다.

이 문자열 / https://www./

문자열을

https://www로 시작하지 않도록 변경해 보세요.

<?php
$p = "/https:\/\/www./";
$str = "http://www.baidu.com";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则:/https:\/\/www./&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/https:\/\/www./&#39;;
}
를 살펴보세요. 실행 결과는 다음과 같습니다.

이 문자열 /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 &#39;该字符串符合这个规则:/https://www.baidu.com/a/b/index.html/&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/https://www.baidu.com/a/b/index.html/&#39;;
}
실행 결과는 다음과 같습니다.

경고: 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 = &#39;/&#39;.preg_quote($p, &#39;/&#39;).&#39;/&#39;;
$str = "https://www.baidu.com/a/b/index.html";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则:/https://www.baidu.com/a/b/index.html/&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/https://www.baidu.com/a/b/index.html/&#39;;
}
?>

실행 결과는 다음과 같습니다.


문자열은 다음 규칙을 따릅니다. /https://www.baidu.com/a/b/index.html/

4. 구분 기호 뒤에 사용되며 패턴 수정자에는 i, m, s 등이 포함됩니다.

요약:

1. i는 대소문자를 무시할 수 있음을 의미합니다.

2. m은 여러 줄 일치를 의미합니다

3. 이 수정자를 설정하면 패턴의 점 메타 문자(.)가 줄 바꿈을 포함한 모든 문자와 일치합니다. 이 설정이 없으면 개행 문자가 포함되지 않습니다.

사례 1,

연습 목표:

1. 이는 대소문자를 무시할 수 있음을 의미합니다.

<?php
$p = "/ABc/i";
$str = "abc";
if (preg_match($p, $str)) {
    echo &#39;该字符串符合这个规则:/ABc/i&#39;;
}else{
    echo &#39;该字符串不符合这个规则:/ABc/i&#39;;
}
?>

실행 결과는 다음과 같습니다.


문자열은 다음 규칙을 따릅니다: /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 &#39;该字符串符合这个规则:/chinese/m,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则:/chinese/m&#39;;
}
?>

실행 결과는 다음과 같습니다.

문자열은 다음 규칙을 따릅니다: /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 &#39;该字符串符合这个规则:/chinese/m,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则:/chinese/m&#39;;
}
?>

运行结果为:

该字符串符合这个规则:/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 &#39;该字符串符合这个规则,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则&#39;;
}

?>

运行结果其实是一样的,结果为:

该字符串符合这个规则,匹配结果为: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 &#39;该字符串符合这个规则,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则&#39;;
}
?>

运行结果如下:

该字符串符合这个规则,匹配结果为: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 &#39;该字符串符合这个规则,匹配结果为:&#39;;
    print_r($math);
}else{
    echo &#39;该字符串不符合这个规则&#39;;
}
?>

运行结果如下:

该字符串符合这个规则,匹配结果为:Array ( [0] => Array ( [0] => chinese g ) )

说明此刻只匹配到一个了,因为.不包含换行符,所以第一个chinese没有匹配到

总结:

本文主要讲解了

1、正则表达式的定义

2、正则表达式的几个基本语法

위 내용은 PHP의 정규식에 대한 자세한 설명(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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