正则表达式元字符

<?php
	/*
	 * 正则表达式元字符
	 * 	*匹配前一个内容的0次1次或多次
	 * 	.匹配内容的0次1次或多次,但不包含回车换行。因为.不需要将前一个内容进行匹配,可以直接将自己做为一个内容进行匹配,所以可以和别的进行组合使用
	 * 	+匹配前一个内容的1次或多次
	 * 	?匹配前一个内容的0次或1次
	 * 	|这是一个弱运算符,|前后只要有任意一个匹配,则进行匹配
	 * 	^匹配字符串首部内容
	 * 	$匹配字符串尾部内容
	 * 	\b匹配单词边界,边界可以是空格或特殊符号
	 * 	\B匹配除带单词边界以外内容
	 * 	{m}匹配前一个内容的重复次数为M次
	 * 	{m,}匹配前一个内容的重复次数大于等于M次
	 * 	{m,n}匹配前一个内容的重复次数M次到N次
	 * 	()合并整体匹配,并放入内存,可使用\1\2...依次获取
	 */
	
	
	//$mode = "/go*gle/"; 
	//google或goooooogle或ggle都会匹配成功,第一个输出为输出google,第二个输出为goooooogle,第三个输出为ggle;所以*号匹配时会将*号前一个字符进行0次出现1次出现或多次出现都进行匹配,只要剩余的也符合即可
	//$mode = "/go*g*le/";   匹配符可以出现多次
	
	//$mode = "/go+gle/"; 当使用+号时,必须出现一次才能匹配成功,如果$str = "ggle"; 则匹配失败
	//$mode = "/go?gle/"; 使用?号时,因匹配的内容为0次或最多1次,所以$str = "google";匹配失败,$str = "ggle";或$str = "gogle";为成功
	
	//$mode = "/g.?gle/"; 用.和?配合使用,指匹配回车符之外的所有字符,但只匹配0次或1次。里面的.并不是匹配别的内容,而是把自己当成一个内容让?来进行匹配
	//$str = "g0gle"; 或 $str = "g_gle"; 中间除回车外的都可以
	
	//$mode = "/g.*gle/"; 用.和*配合,指匹配回车符之外的所有字符,可匹配0次或1次或多次,所以和上面的.?一样,是一个经典组合
	//$str = "g0asd0gle"; 因为可匹配多次,所以这样的要用这种组合
	
	//$mode = "/xiuyuanxi|no/"; 当匹配的结果里面有xiuyuanxi或no,则匹配成功,如果有两个则将两个结果都匹配到。
	//$str = "sf9sdf5xiuyuanxiasdfno"; 因为两个结果都有,所以输出为 Array ( [0] => Array ( [0] => xiuyuanxi [1] => no ) )
	
	//$mode = "/^xiuyuanxi/";  
	//$str = "xiuyuanxiasdfasf";  当xiuyuanxi出现在开头则匹配成功,出现在其它位置则匹配失败
	
	//$mode = "/^xiuyuanxi.*WGP$/"; 以xiuyuanxi开头,以WGP结束,中间可以包含除回车外的其它内容
	//$str = "xiuyuanxi.com_WGP";
	
	//$mode = "/\bis\b/"; 当is两边是分隔符时(如:空格、-、/等符号都可以),即与其它词分隔开来时,匹配成功,否则失败
	//$str = "what-is love";  如果是"is it a apple"也是起作用的
	
	//$mode = "/ba{1}la/";  
	//$str = "bala"; 当上面为{1}时,则下面的是bala,当上面使用{5}时,则变为baaaaala才能匹配成功
	
	//$mode = "/ba{2,}la/"; 这样的方式时最少出现2次,多了不限。变成{2,6}就是最少出现2次,最多出现6次
	//$str = "baaaaala";
	
	//$mode = "/ba(abc)la/";  这样将匹配里面带abc的 。当变成$mode = "/ba(abc)l\\1a/   $str = "baabcabcla" 这样先匹配一次abc,当程序看到\\1时会再查找一次带有abc的
	//$str = "baabcla";
	//$mode = "/2009(.*)02\\1 15/";  采用这种方式检测日期格式,为防止输入时出现2009/02-15这种情况,用()加\\1检测就会好的多,即第一次匹配的是什么,后面会进行同样匹配
	//$str = "2009/02/ 15";
	//下面是日期过滤升级版
	//$mode = "/[0-9]{2,4}(.*)[0-9]{1,2}\\1[0-9]{1,2}/";
	//$str = "2009/02/15";
	
	$mode = "/[0-9]{2,4}(.*)[0-9]{1,2}\\1[0-9]{1,2}/";
	$str = "2009/02/15";
	
	if(preg_match_all($mode,$str,$arr))
	{
		echo "匹配成功";
		print_r($arr);
	}else{
		echo "匹配不成功";
	}
	
?>

修远兮

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

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

推荐文章RECOMMEND