>백엔드 개발 >PHP 튜토리얼 >PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

WBOY
WBOY원래의
2021-10-18 14:26:182362검색

이전 글에서는 "PHP의 리스트, 각 함수와 그 조화 사용법 배우기"를 가져왔는데, 주로 리스트 함수와 각 함수의 사용법, 그리고 이들을 서로 연동하여 사용하는 방법을 설명한 것 같아요. 이제 거의 마스터했으므로 이 기사에서 PHP의 정규식을 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다!

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

정규 표현식은 처음에 선언된 일부 문자와 이러한 문자의 조합으로 구성된 "규정된 문자열"입니다. 이 규정된 문자열은 실제로 문자열을 필터링하는 데 사용됩니다. 사용자로 로그인할 때 가끔 인증코드나 전화번호 등 특정 데이터를 입력해야 하는 경우가 있는데, 이때 정규식을 사용해야 합니다.

정규식은 복잡해 보이지만 실제로는 어렵지 않습니다.

정규식의 구분자

가장 먼저 배워야 할 것은 정규식의 구분자입니다. 이름에서 알 수 있듯이 구분자는 정규식의 경계를 결정하는 기호입니다. 그리고 경계 내에서는 정규식입니다. 동시에 정규 표현식의 구분 기호는 다음과 같이 규정됩니다.

  • 구분 기호, a-zA-Z0-9는 사용할 수 없지만 다른 모든 문자는 사용할 수 있습니다. 그리고 시작과 끝이 있는 쌍으로 나타나야 합니다.

예제는 다음과 같습니다.

$正则表达式$
%正则表达式%
/正则表达式/

주의해야 할 점은 /가 정규식에서 /를 일치시켜야 하는 경우 Escape 문자를 사용할 수 있다는 것입니다. . 번거롭다면 다음과 같은 다른 구분 기호를 직접 사용할 수 있습니다. /是转义字符,当我们正则中需要匹配/的时候,可以使用转义一下。如果觉得麻烦的话,可以直接使用其他的定界符比如:

$/$

正则表达式的原子

正则表达式的原子是正则表达式里的最小单位,也就是我们需要匹配的内容,在我们成立的整形额表达式中,最少也要有一个原子。

其实可以理解为,所有可见的不可见的字符都是原子,比如空格、回车、换行、0-9、标点符号、A-Za-z、中文这些都是原子。

preg_match() 函数

在详细的讲原子之前,我们要先了解一下一个函数,那就是preg_match

PHP 中的 preg_match() 函数可以根据定义的正则表达式对字符串进行搜索以及匹配。

语法格式如下:

preg_match ( string $正则 , string $字符串 [, array &$结果] )

根据$正则也就是我们定义的正则表达式,在匹配$字符串,如果存在则返回匹配个数,然后把匹配的结果放在$结果里。如果没有匹配到结果那就返回0。

我们通过示例来看一下:

<?php
//定义一个变量叫a,作为我们定义的正则表达式。
$a = &#39;/a/&#39;;
$b = &#39;abbcccddddeeeee&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>

输出结果:

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

由上述示例可以看出,我们定义了变量a,希望能够匹配的是a,正好在$b中存在a,通过if else语句输出成功了。

再来一个示例:

<?php
//定义一个变量叫a,作为我们定义的正则表达式。
$a = &#39;/fff/&#39;;
$b = &#39;abbcccddddeeeee&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>

输出结果:

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

上述示例中,希望匹配到字符串,但是$b中不存在,所以没有匹配成功,通过if else语句输出为匹配成功。

知道了preg_match() 函数的基本用法之后我们可以和特殊标识的原子结合起来使用。

特殊标识的原子

  • d---匹配一个0-9    

  • D---除了0-9以外的所有字符    

  • w---a-zA-Z0-9_    

  • W---除了0-9A-Za-z_以外的所有字符    

  • s---匹配所有空白字符n t r 空格    

  • S---匹配所有非空白字符    

  • [ ]---指定范围的原子    

它们的具体用法给大家举个例子就明白了:

<?php
$a = &#39;/\d/&#39;;
$b = &#39;人生自古谁无4&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>

输出结果:

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

在上述示例中,特殊标识的原子d表示的就是0-9的数字,那么在需要匹配的$b中存在一个4,所以匹配成功。

<?php
$a = &#39;/\w/&#39;;
$b = &#39;人生自古谁无死&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>

输出结果:

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

在上述实例中,特殊标识的原子w表示的是a-zA-Z0-9_ ,在变量b中没有相应的元素,所以输出结果为未匹配到。

其中还有一个[^]

<?php
$a = &#39;/[^0-9A-Za-z_]/&#39;;
$b = &#39;abbccc122333&#39;;
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>

정규 표현식의 원자


정규 표현식의 원자는 정규 표현식에서 가장 작은 단위이며, 이는 우리가 확립한 표준에서 일치시켜야 하는 것입니다. 정수 표현식의 경우 원자가 하나 이상 있어야 합니다. 🎜🎜실제로 공백, 캐리지 리턴, 줄 바꿈, 0-9, 문장 부호, A-Za-z 및 중국어와 같이 보이는 문자와 보이지 않는 문자는 모두 원자라고 이해할 수 있습니다. 🎜🎜🎜preg_match() 함수 🎜🎜🎜원자에 대해 자세히 이야기하기 전에 먼저 함수, 즉 preg_match를 이해해야 합니다.🎜🎜PHP에서 preg_match() 함수는 다음과 같이 표현할 수 있습니다. 정의된 정규 표현식 문자열을 검색하고 일치시킵니다. 🎜🎜구문 형식은 다음과 같습니다. 🎜
<?php
$a = &#39;/\d+/&#39;;
$b = "爱你10000年";
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>
🎜우리가 정의한 정규식인 $regex에 따라 $string을 일치시킬 때 $string이 있으면 일치하는 개수를 반환한 다음 일치하는 결과를 반환합니다. $result에 배치됩니다. 결과가 없으면 0이 반환됩니다. 🎜🎜🎜예제를 살펴보겠습니다. 🎜
<?php  
    $a = &#39;/ABC/i&#39;; 
$b = &#39;8988abc12313&#39;;
$c = &#39;11111ABC2222&#39;; 
if(preg_match($a, $b, $d)){
     echo &#39;匹配到了,结果为:&#39;; 
    var_dump($d); }else{
     echo &#39;没有匹配到&#39;;
     }
 ?>
🎜출력 결과: 🎜🎜🎜PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)🎜🎜위의 예에서 볼 수 있듯이 a와 일치하기를 바라며 변수 a를 정의했고 a는 $b에 존재하며 if를 통해 출력됩니다. else 문이 성공했습니다. 🎜🎜또 다른 예: 🎜
<?php  
    $a = &#39;/ABC/i&#39;; 
$b = &#39;8988abc12313&#39;;
$c = &#39;11111ABC2222&#39;; 
if(preg_match($a, $c, $d)){
     echo &#39;匹配到了,结果为:&#39;; 
    var_dump($d); }else{
     echo &#39;没有匹配到&#39;;
     }
 ?>
🎜출력 결과: 🎜🎜🎜PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)🎜🎜위의 예에서는 문자열이 일치하기를 원하지만 $b가 존재하지 않으므로 성공적인 일치가 없습니다. if else 문은 일치가 성공했음을 출력합니다. 🎜🎜preg_match() 함수의 기본 사용법을 알고 나면 특별히 식별된 Atom과 조합하여 사용할 수 있습니다. 🎜🎜🎜특별히 식별된 원자🎜🎜🎜🎜🎜d---0-9와 일치 🎜🎜🎜🎜D---0-9자를 제외한 모두 🎜🎜 🎜🎜w---a-zA-Z0-9_ 🎜🎜🎜🎜W---0-9A-Za-z_ 문자를 제외한 모두 🎜🎜🎜🎜s---모든 공백 문자 n t r 공백 일치 🎜🎜🎜🎜S---공백이 아닌 모든 문자 일치 🎜🎜🎜🎜[ ] ---지정된 원자 범위 🎜🎜🎜🎜예를 들어 구체적인 사용법을 설명합니다: 🎜🎜rrreee🎜출력 결과: 🎜🎜🎜PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)🎜🎜위의 예에서 특별히 식별된 원자 d는 0 -9 숫자를 나타내고 그 안에 4가 있습니다. $b가 일치해야 하므로 일치가 성공합니다. 🎜rrreee🎜출력 결과: 🎜🎜🎜1018.13. png🎜🎜위의 예에서 특별히 식별된 원자 w는 a-zA-Z0-9_를 나타내며, 변수 b에 해당 요소가 없으므로 출력 결과가 일치하지 않습니다. 🎜🎜지정된 간격에 맞지 않는 문자를 나타내는 [^] 문자도 있습니다. 🎜🎜예제는 다음과 같습니다. 🎜rrreee🎜출력 결과: 🎜🎜

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

通过[^]字符匹配除0-9A-Za-z_以外的字符,未匹配到。

总结一下:

  • \w---[a-zA-Z0-9_]    

  • \W---[^a-zA-Z0-9_]    

  • \d---[0-9]    

  • \D---[^0-9]    

  • \s---[ \t\n\f\r]    

  • \S---[^ \t\n\f\r]    

正则表达式的元字符

在上面的示例中,我们能够看出通过匹配的话,只能匹配一个字符,但是在我们的日常使用中,通常会匹配多个字符,那这时候只通过我们的原子就不能达到我们的目的。就需要通过元字符来帮我们修饰原子,实现更多的功能。

  • *---代表匹配前面的一个原子,匹配0次或者任意多次前面的字符。    

  • +---匹配一次或多次前面的一个字符    

  • ?---前面的字符可有可无【可选】 有或没有    

  • .---更标准一些应该把点算作原子。匹配除了\n以外的所有字符    或者。注:它的优先级最低了。    

  • ^---必须要以抑扬符之后的字符串开始    

  • $--- 必须要以$之前的字符结尾    

  • \b---词边界    

  • \B---非边界    

  • {m}---有且只能出现m次    

  • {n,m}---可以出现n到m次    

  • {m,}---至少m次,最大次数不限制    

  • ()---改变优先级或者将某个字符串视为一个整体,匹配到的数据取出来也可以使用它    

接下来我们通过一些例子来实例看一下这些元字符的使用:

<?php
$a = &#39;/\d+/&#39;;
$b = "爱你10000年";
if(preg_match($a, $b, $c)){
   echo &#39;匹配到了,结果为:&#39;;
   var_dump($c);
}else{
   echo &#39;没有匹配到&#39;;
}
?>

输出结果:

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

通过元字符+的添加,匹配到了多次字符,\d+中d是匹配数字,+则表示最少匹配一次前面的字符。

正则表达式的模式修正符

通过原子和元字符的了解,我们已经完成了正则表达式的入门,但是这仍然不能代表正则表达式的真正实力,如果我们只希望正则表达式匹配一部分应该怎么办?有些特殊情况依然需要处理,这时候我们就要用到正则表达式的模式修正符。

下面列举一些常用的模式修正符:

  • i    模式中的字符将同时匹配大小写字母.    

  • m    字符串视为多行    

  • s    将字符串视为单行,换行符作为普通字符.    

  • x    将模式中的空白忽略.    

  • A    强制仅从目标字符串的开头开始匹配.    

  • D    模式中的美元元字符仅匹配目标字符串的结尾.    

  • U    匹配最近的字符串.    

它的用法如下:

/正则表达式/模式修正符

接下来我们通过一些实例来看一下它的使用:

<?php  
    $a = &#39;/ABC/i&#39;; 
$b = &#39;8988abc12313&#39;;
$c = &#39;11111ABC2222&#39;; 
if(preg_match($a, $b, $d)){
     echo &#39;匹配到了,结果为:&#39;; 
    var_dump($d); }else{
     echo &#39;没有匹配到&#39;;
     }
 ?>

输出结果:

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

i可以让匹配的时候同时匹配大小写,那么接下来把匹配的$b换成$c试一下,我们看一下输出结果:

<?php  
    $a = &#39;/ABC/i&#39;; 
$b = &#39;8988abc12313&#39;;
$c = &#39;11111ABC2222&#39;; 
if(preg_match($a, $c, $d)){
     echo &#39;匹配到了,结果为:&#39;; 
    var_dump($d); }else{
     echo &#39;没有匹配到&#39;;
     }
 ?>

输出结果:

PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)

推荐学习:《PHP视频教程

위 내용은 PHP 정규식의 흥미로운 기본(그림과 함께 자세한 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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