PHP—正则表达式

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

一、正则表达式语法规则

  • 描述了一类字符串的特征,然后通过这个特征可以配合一些特定的函数,来完成对字符串更加复杂的一系列操作!
  • 普通字符和特殊字符组成的一个字符串

二、定界符

  • 我们一般习惯使用正斜线"/"作为定界的字符,前后一致

三、普通字符

  • 包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

四、元字符

\d	匹配任意一个十进制数字,等价于[0-9]
\D	匹配任意一个除十进制数字以外字符,等价于[^0-9]
\s	匹配任意一个空白字符,比如换页符、换行符、回车符、制表符、垂直制表符
\S	匹配除空白字符以外的任何一个字符
\w	匹配任意一个数字或字母或下划线
\W	匹配除数字、字母、下划线以外的任意一个字符
.	匹配除换行符以外的任意一个字符
*	匹配0次、或1次、或多次其前面的字符
+	匹配1次或多次其前面的字符
?	匹配0次或1次其前面的字符
{n}	表示其前面字符恰好出现n次
{n,}	表示其前面字符出现不少于n次
{n,m}	表示其前面的字符至少出现n次,最多出现m次
^或\A	匹配字符串开始位置
$或者\Z	匹配字符串的结束位置
|	匹配两个或多个模式
[]	匹配方括号中的任意一个字符
[^]	匹配除方括号中字符以外的任意一个字符
()	将括号中作为一个整体以便将其中的内容获取到
	在我们的正则表达式中 可以使用圆括号来将某一段括起来,在圆括号的后面部分,
	我们可以使用\\数字 来代表圆括号部分所匹配到的内容!

五、模式修正符

  • 在正则表达式的定界符之后使用的,可以调整正则表达式的解释,扩展正则表达式在匹配、替换等操作时的某些功能,增强正则表达式的处理能力。
    常见模式修正符:
  	i	在和模式进行匹配时不区分大小写
  	m	多行匹配,如果目标字符串 中没有"\n"字符, 或者模式中没有出现^或$, 设置这个修饰符不产生任何影响
  	s	如果设定了此修正符,那么.将匹配所有的字符包括换行符
  	U	禁止贪婪匹配

六、与正则表达式配合的函数

preg_match()返回pattern的匹配次数,值为1或0,即只执行一次匹配。

preg_match()执行一个正则表达式匹配

参数说明:

第一个参数:正则表达式
第二个参数:目标字符串
第三个参数(可选):放一个变量,执行完成之后,里面会有匹配到的部分以及等等一些数据!
第四个参数(可选):可以传PREG_OFFSET_CAPTURE进入(那么第三个参数那个变量里面的数据就会有匹配到的部分的偏移值),默认传的是0。
第五个参数(可选):可以传一个值,来表示从目标字符串的哪个位置开始搜索(单位是字节)。

$pattern='/t(.*?)st/';
$str='adwdwqdqwdqwtest      tdqwst     test  tvrgrgrst';
var_dump(preg_match($pattern, $str,$arr));
var_dump($arr);
if(preg_match($pattern, $str,$arr,PREG_OFFSET_CAPTURE)){
	echo '找到啦!<br />';
	var_dump($arr);
}else{
	echo '没找到!';
}

preg_match_all()执行一个全局正则表达式匹配。

preg_match_all()
第四个参数(可选):
	PREG_PATTERN_ORDER
	PREG_SET_ORDER
	PREG_OFFSET_CAPTURE
第五个参数(可选):可以传一个值,来表示从目标字符串的哪个位置开始搜索(单位是字节)。
$pattern='/t(.*?)(s)t/';
$str='adwdwqdqwdqwtest      tdqwst     test  tvrgrgrst';
var_dump(preg_match_all($pattern, $str,$arr,PREG_OFFSET_CAPTURE));
var_dump($arr);

preg_replace执行一个正则表达式的搜索和替换

 preg_replace第一个参数与第二个参数传数组,一一对应的去替换!
  第一个参数:正则表达式
  第二个参数:要替换的字符串
  第三个参数:目标表达式
*/
$pattern=array(
		'/<div(.*?)>(.*?)<\/div>/',
		'/<p(.*?)>(.*?)<\/p>/'
);
$str1=array(
		'<a$1 href="http://sifangku.com">$2</a>',
		'<span$1>我是span标签啦!$2</span>'
);
$str='dwqdwq<div style="color:red;font-size:25px;">测试成为绯闻绯闻绯闻绯dwqdwqdwq闻cqdwqdqw</div>dqwwdqdwq<p>我是后面那个div</p>';

echo '替换后的:'.preg_replace($pattern, $str1, $str,-1,$count);
var_dump($count);
echo '<br /><br /><br /><br />';
echo '原来的字符串:'.$str;
posted @ 2022-02-19 22:21  未完成的歌QAQ  阅读(57)  评论(0编辑  收藏  举报