正则表达式中的“模式修正符”

<?php
	/*
	 * 正则表达式中的“模式修正符”
	 * 
	 * 一、运算顺序
	 * 优先级:
	 * () 圆括号为内存处理,所以最高
	 * *?+{} 重复匹配的内容其次
	 * ^$\b 边界处理第三
	 * | 条件处理第四
	 * 
	 * 通过以上的运算顺序计算后匹配
	 * 
	 * 二、模式修正符
	 * 模式修正符是为正则表达式增强和补充的一个功能,使用在正则之外
	 * 模式修正符样式:
	 * /正则/U 
	 * 
	 * 常用修正符:
	 * i 正则内容在匹配时候不区分大小写(默认是区分的)
	 * m 在匹配首内容或者尾内容时候采用多行识别匹配
	 * s 将转义回车取消是为单行匹配如.区别的时候
	 * x 忽略正则中的空白
	 * A 强制从头开始匹配
	 * D 强制$匹配尾部无任何内容 \n
	 * U 禁止贪婪匹配,只跟踪到最近的一个匹配符并结束,常用在采集程序上的正则表达式
	 */
	
	//$mode = "/[a-z]|[A-Z]/";  匹配为成功
	//$str = "B";
	
	//$mode = "/[a-z]/i";  使用修正符/i后,不管大小写都会匹配成功
	//$str = "C";
	
	//$mode = "/^aaa/";  这样匹配不成功,因为不识别\n换行符。使用$mode = "/^aaa/m"后匹配成功
	//$str = "000aaa\naaa000";
	
	//$mode = "/444(.*)222/";  这样是匹配不成功的,因为不能匹配回车符。$mode = "/444(.*)222/s"; 后可以匹配成功了
	//$str = "444000\n333000\n22200";
	
	//$mode = "/33 3/"; 这样带空格是匹配不成功的。 $mode = "/33 3/x";这样就可以了。如像//$mode = "/2009(.*)02\\1 15/"这样的,因为\1后面必须带空格,所以就可以使用修正符x,这样就没关系了
	//$str = "44400033300022200";
	
	//$mode = "/^444/mA";  因为加了A,所以要求所有的行首都要以444开头,如果不加A,则某一行以444开头即可
	//$str = "000\n44400022200";
	
	//$mode = "/200$/D";
	//$str = "000\n44400022200\n"; 如果最后没有这个/n则可以匹配成功,如果用D时最后有这些符号会导致匹配不成功
	
	//$mode = "/<(.*)>/";  匹配得到sss,要想得到<b>标签,需要加上修正符U,这时候就可以了
	//$str = "<b>sss</b>ppp";
	
	
	$mode = "/<(.*)>/U";
	$str = "<b>sss</b>ppp";
	
	if(preg_match($mode,$str,$arr))
	{
		echo "匹配成功".$arr[0];
	}else{
		echo "匹配不成功";
	}
?>

修远兮

在这里记录每一点自己需要的知识

订阅 "修远兮" 公众号, 与我们共享精采

推荐文章RECOMMEND