正则表达式php中的几点

来源:互联网 发布:正在准备设定windows 编辑:程序博客网 时间:2024/06/07 23:40
1、preg_match($pattern,$subject,[array & $matches]) 第三个参数可选,因为只匹配一次,返回值为 0或


者1,返回一维数组。 


preg_match_all($pattern,$subjuct,array&$matches) 第三个参数必选,一般返回的是二维数组。


用于表单验证。
都会把匹配结果放到$matches 数组中,返回值为返回的个数。


也就是可以拿到返回的键值对的个数


pattern 正则表达式


subject 目标数据。




2、preg_replace($pattern,$replacement,$subject) // 用于非法词语过滤
   preg_filter($pattern,$replacement,$subject)


支持数组,两者的区别是如果$subject是个数组,filter会保留发生了替换的字符串,repalce都会保留。


$pattern=array('/[0123]/','[456]'.'[789]');


$replacement=array('hello','fuck','world');


str_replace();


3、preg_grep($pattern,array$input);


$pattern='/[0-9]/';


$subject=array('ca','af34','dasfaf334asdf');


$arr=preg_grep($pattern,$subject);


preg_grep也会过滤的


4、exlode 和preg_split($pattern,$subject);


5、preg_quote($str) //  正则预算符转义,是正则的地方都会被转义
$str='afas{adfa}[asdfa12]';
$str=preg_quote($str);



===================================================================


正则表达式语法。


1、界定符号 开始和结束位置 '//'  本身就是个字符串,然后用//夹在中间。界定符不是正则表达式的一部


分。只是开始和结束位置。或者两个##和{}都可以。


2、正则表达式工具 :regexpal js和html编写的。


3、原子 unicode编码表 


可见原子:unicode中编码表中用键盘输出后肉眼可见的字符。
;?‘





文字匹配建议转换为unicode,然后放入到$pattern  中。
如果匹配的是正则的运算符,需要用\转义。
如果是在目标字符串中匹配\,需要用\来转义\


不可见原子
空格 
tab制表符号 \t
 回车\r
回车  \n 【换行】


4、元字符
原子的筛选方式
|匹配两个或者多个分支选择 Duang|duang [Dd]uang
【】匹配方括号中的任意一个原子
[^]匹配除了方括号中的原子,^必须放在【】的首位,才算取反。如果放在其他的地方,就当字符的正


常匹配了。


. 匹配除了换行符之外的任意字符[^\n]
\d 任意十进制数字[0-9],
\D匹配非0-9任意数字[^0-9]


\s 匹配不可见原子[\f\v\t\r\n]
\S 匹配可见原子[^\f\v\t\r\n]


\w 匹配任意数字字母下划线 [0-9A-Za-z_]
\W 匹配非任意数字,字母下划线[^0-9a-zA-Z_]


5、量词


{n}表示前面的原子恰好出现n次 支持集合。比如[a-zA-Z]{2}匹配任意两个英文字母在一起的字符
{n,}表示前面的原子最少出现n次
 {n,m}表示前面的


 ? 0次或者一次{0,1} _?i 不管有没有下划线,都会匹配到i 匹配到_i  和i
 * 0次一次或者多次{0,}
 +匹配一次或者多次之前的原子{1,}




6、 边界控制和模式单元


^字符串开始的位置
$字符串结束的位置
^Duang~$ 意思是必须完全匹配Duang~。前后有空格的话都不会匹配到。




匹配duang 和Duang的方法


duang|Duang
(dD)uang
(d|D)uang




7、修正模式  类似手机的情景模式


 7.1贪婪匹配与懒惰匹配 




贪婪匹配:匹配结果存在歧义时取其长


懒惰模式取其短


默认模式是贪婪模式,如果要改为非贪婪模式,只需要在后面加上U
7.2 i 忽略英文字母大小写


7.3 x 忽略空白,制表符,空格等,指的是忽略正则表达式中($pattern)中的空白等15:27 2015/4/22


7.4 s 让.匹配包括换行符在内的所有字符{默认点是匹配除了换行符之外的任意字符}
7.4eg
$pattern="/./s";


$subject='1234'."\n"."567";




preg_match_all($pattern, $subject,$match);


show ($match);
out=》Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 


            [5] => 5
            [6] => 6
            [7] => 7
        )


)
============================================================================================
实战应用 


1、非空 原子出现1次或者多次
  .+ 此匹配 会匹配到\t
 [^.\s] 这个比较好
2、浮点两位小数
-?\d*\.\d{2}
3、手机号
^1[345678]{1}[0-9]{1}\d{9}$
4、email


^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$
5、email
^(https?://)?(\w+\.)+[a-zA-Z]*$


=======================================================================











0 0
原创粉丝点击