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

模式修正符是在正则表达式的定界符之后使用的,可以调整正则表达式的解释,扩展正则表达式在匹配、替换等操作时的某些功能,增强正则表达式的处理能力。

五、模式修正符

模式修正符可以搭配使用。

常见模式修正符:

模式修正符 i

<?php
/*
 * 模式修正符:i 在和模式进行匹配时不区分大小写
 */
$pattern='/test/i';

$str='test Test tEst tesT';
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

模式修正符 m

<?php
/*
 模式修正符 : m
多行匹配,如果目标字符串 中没有"\n"字符, 或者模式中没有出现^或$, 设置这个修饰符不产生任何影响
使用条件:
1)目标字符串中必须包含"\n"
在字符串中出现"\n"就表示新的一行开始
2)正则表达式中必须要出现^或者$

学前须知:
\r:回车符
\n:换行符

在 windows 操作系统中你所看到的换行(现象 )其实是通过两个字符来完成的(\r\n)
在 Linux 操作系统中看到的换行(现象),就是通过\n 来完成的

模式修正符 m 的作用:多行匹配
*/

//$pattern='/^test/m';
//$str="test\ntest\ntest\n";
/*
$str="test
test
test
test";
*/

/*
$pattern='/test$/m';
$str="test\n
		test\n
		test\n
		test";
*/

$pattern='/test\r*$/m';
$str="test
test
test
test";
var_dump(preg_match_all($pattern,$str,$arr));
var_dump($arr);
?>

模式修正符 s

<?php
/*
 * 模式修正符:s
 * 如果设定了此修正符,那么.将匹配所有的字符包括换行符(\n)
 */

//$pattern='/t.st/s';
//$str="t\nst";

$pattern='/t..st/s';
$str="t
st";//其实在 windows 里面就等价于$str="t\r\nst"

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

模式修正符:U

<?php
/*
 * 模式修正符:U  禁止贪婪匹配
 */
//$pattern='/a.*?f/';
$pattern='/a.*f/U';
$str="akwkmskf wqeadkmkwqqsf";

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

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

1.preg_match()函数

执行一个正则表达式匹配

<?php
/*
preg_match()
执行一个正则表达式匹配
参数说明:
	第一个参数:正则表达式
	第二个参数:目标字符串
	第三个参数(可选):放一个变量,执行完成之后,里面会有匹配到的部分以及等等一些数据!
	第四个参数(可选):可以传 PREG_OFFSET_CAPTURE 进入(那么第三个参数那个变量里面的数据就会有匹配到的部分的偏移值),默认传的是 0
	第五个参数(可选):可以传一个值,来表示从目标字符串的哪个位置开始搜索(单位是字节)。
*/
$pattern='/t(.*?)st/';
$str='test tesdast  dadatesdafafat';

var_dump(preg_match($pattern,$str,$arr));

var_dump($arr);

if(preg_match($pattern,$str,$arr,PREG_OFFSET_CAPTURE))
{
	echo '找到啦!';
	var_dump($arr);
}else{
	echo '没找到!';
}

2.preg_match_all()函数

preg_match_all()按指定的正则表达式,在给定的字符串中进行搜索,匹配到符合特征的部分取出来。

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

$pattern='/t(.*?)(s)t/';

$str = 'adgtsdfsthg sdtfasfasst';

var_dump(preg_match_all($pattern,$str,$arr,PREG_OFFSET_CAPTURE));

var_dump($arr);
?>

3.preg_replace()函数

<?php
/*
 * preg_replace():
 * 执行一个正则表达式的搜索和替换
 * 参数说明:
 * 		第一个参数:正则表达式替换
 * 		第二个参数:要替换成的字符串
 * 		第三个参数:目标字符串
 * 		第四个参数(可选):默认是-1,就是替换所有符合特征部分的
 * 		第五个参数(可选):可以放一个变量
 */
$pattern='/<div(.*?)>(.*?)<\/div>/';
$str1 = '<a$1 href="http://www.baidu.com">$2</a>';
//$str1 ='<a>\\1</a>';
$str='jka<div style="color:red;font-size:25px;">fassdf</div>sas<div>fasd</div>ada';
echo "替换前:".$str;
if(preg_match($pattern,$str,$arr)){
	echo "<br />找到啦<br />";
	echo "替换后的:".preg_replace($pattern, $str1,$str,-1,$count);
	echo $count;	
}else{
	echo "没找到";
}
echo "<br />";
?>
<?php
/*
 * preg_replace 第一个参数与第二个参数传数组,一一对应的去替换!
 */

$pattern=array(
		'/<div(.*?)>(.*?)<\/div>/',
		'/<p(.*?)>(.*?)<\/p>/'
);
$str1=array(
		'<a$1 href="http://www.baidu.com">$2</a>',
		'/<span$1>我是 span 标签啦$2<\/span>/'
);

$str='jka<div style="color:red;font-size:25px;">fassdf</div>sas<div>fasd</div>adasfds<p style="color:blue";></p>df';
echo "替换前:".$str;
echo "<br />找到啦<br />";
echo "替换后的:".preg_replace($pattern, $str1,$str,-1,$count);
echo $count;
echo "<br />";
?>

发表评论

发表评论

*

沙发空缺中,还不快抢~