PHP正则表达式学习笔记(一)

PHP 一些基础的东西,自己有必要加强巩固,记下此笔记方便记忆回顾。

一、正则表达式语法规则

正则表达式描述了一类字符串的特征,通过这个特征与特定的函数配合,对其它的字符串进行匹配、查找、替换及分割操作!
这类字符串的特征是由一个或多个

1.普通字符(比如az

2.元字符(有特殊功能的字符比如*+等),等组成的一个字符串!

例如'/a/',a 就是普通字符,/是定界符(表示正则表达式的开始或结束)

二、定界符

我们一般习惯使用正斜线”/”作为定界的字符
当然除了字母、数字、和反斜线以外的字符都可以作为定界符,比如

#
!
{}
|

都是可以的!定界符放在正则表达式的起始位置,前后一致

三、普通字符

比如:a-zA-Z0-9、双引号、单引号,它们没有特殊的含义

四、元字符

元字符指的是在正则表达式中有特殊含义的字符。

元字符:\d

<?php
/*
 * \d 匹配任意一个十进制数字
 */
$pattern='/t\dst/';
$str='abct6st';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:\D

<?php
/*
 * \D 匹配任意一个除了十进制数字意外的字符
 */
$pattern='/t\Dst/';
$str='abctKst';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:\s

<?php
/*
 * \s 匹配任意一个空白字符,比如换页符、换行符、回车符、制表符、垂直制表符
 */
$pattern='/t\sst/';
$str='abct st';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:\S

<?php
/*
 * \S 匹配除了空白字符之外的字符
 */
$pattern='/t\Sst/';
$str='abct stt@st';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:\w

<?php
/*
 * \w 匹配任意一个数字或字母或下划线
 */
$pattern='/t\wst/';
$str='abct_stt@st';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:\W

<?php
/*
 * \W  匹配除数字、字母、下划线以外的任意一个字符
 */
$pattern='/t\Wst/';
$str='abct#stt@st';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:.

<?php
/*
 * . 匹配除换行符以外的任意一个字符
 */
$pattern='/t.st/';
$str='abctastt@st';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:*

<?php

/*
 * 元字符:*
 * 匹配 0 次、或 1 次、或多次其前面的字符
 * 放在*前面的那个字符可以出现 0 次,也可以出现 1 次,也可以出现多次
 * */
$pattern ='/te*st/';
$str='abcteeeeeeeeeeeeeeeeeeeeest';

var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:+

<?php
/*
 * 元字符:+
 * 匹配 1 次、或多次其前面的字符
 * 放在+前面的那个字符可以出现 1 次,也可以出现多次
 * */
$pattern ='/te+st/';
//$str='abcteeeeeeeeeeeeeeeeeeeeest';
$str ='abctst';//+代表前面的字符出现 1 次或者多次,但是不能一次都不出现

var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:?

<?php
/*
 * 元字符:?
 * 放在?前面的那个字符可以出现 0 次,或者 1 次
 * */
$pattern = '/te?st/';
$str='abcteest';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);

元字符:{n}

<?php
/*
 * 元字符:{n} n 代表自己写的一个数字
 * 表示其前面字符恰好出现 n 次
 * 放在{n}前面的字符恰好出现 n 次
 * */
$pattern = '/te{2}st/';
$str='abcteeeest';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

元字符:{n,}

<?php
/*
 * 元字符:{n,} n 代表自己写的一个数字
 * 表示其前面字符出现不少于 n 次
 * 放在{n,} 前面的那个字符恰好出现的次数应该大于等于 n 次
 * */
$pattern = '/te{3,}st/';
$str='abcteeeest';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

元字符:{n,m}

<?php
/*
 * 元字符:{n,m}  表示其前面的字符至少出现 n 次,最多出现 m 次
 * */
$pattern = '/te{3,5}st/';
$str='abcteeeeeeest';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

元字符.与 n 配合

<?php
/*
 * .与 n 配合  表示前面的一个字符必须出现 n 次
 * */
$pattern='/t.{3}st/';
$str='abct111st';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符.与*配合

<?php
/*
 * .与*配合  表示前面可以出现任意字符
 * .*配合使用默认情况下是贪婪匹配(尽可能多的去匹配字符)
 * */

//.*?:加了一个?可以解决贪婪匹配的问题,懒惰匹配
$pattern='/t.*?t/';
$str='abctdasfastasdadadasdadddt';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:^或\A

<?php
/*
 *^或\A 匹配字符串开始位置
 */

$pattern ='/\Atest/';
$str='testabctestabc';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

元字符:&或\Z

<?php
/*
 * &或\Z 匹配字符串的结束位置
 */

$pattern='/test$/';
$str='dwadatestsdgfgtest';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);

元字符^与&配合使用

<?php
/*
 * ^与&配合使用
 */

//$pattern='/^test$/';
$pattern='/^te.*t$/';
$str='tesafadafasdsast';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

元字符:|

<?php
/*
 * | 匹配两个或多个模式
 */
$pattern='/test|abc/';
$str='tesdaabcddfdfsg';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

元字符:[]

<?php
/*
 * [] 匹配方括号中的任意一个字符串
 */
$pattern='/t[abcdef]st/';
$str='dwqeqdatdstaabcddfdfstsg';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

元字符:[^]

<?php
/*
 * [^] 匹配除方括号中字符以外的任意一个字符
 */
$pattern='/t[^a]st/';
$str='tasttest';
var_dump(preg_match_all($pattern, $str,$arr));
var_dump($arr);
?>

元字符:()

<?php
/*
 * () 将括号中作为一个整体以便将其中的内容获取到
 * 在正则表达式中可以将某一段括起来,在圆括号的后面部分,
 * 我们可以使用\\数字 来代表圆括号部分所匹配到的内容
 */
$pattern='/t(e)st\\1/';
//\\1 就代表第一个圆括号部分所匹配到的内容'teste'
$str='        teste        ';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>
文章目录

发表评论

发表评论

*

沙发空缺中,还不快抢~