imooc正则表达式学习笔记

PHP正则表达式

1、正则表达式作用

字符串搜索和匹配的工具。

1正则表达式通配符。

Windows搜索,*.jpg

Linux命令,ls -l /dev/sda*

2)正则表达式验证邮箱

2、PHP中的正则表达式

//php对象打印

if(is_array($var) || is_object($var)){

print_r($var);

}else{

echo $var;

}

PHP中正则表达式的函数

1preg_match,preg_match_all

作用:在目标字符串中查找正则表达式匹配

用法:

$num = preg_match($pattern,$subject,array &$matches)

返回值:

$num :返回匹配的个数。

$matches:返回匹配的对象。

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

$subject = 'wsijd09dfasd9dsf8fdas';

$m1=$m2=array();

preg_match($pattern,$subject,$m1);

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

$m1[0] = 0;//一维数组

//$m2二维数组,$m2[0]--> array(0,9,9,8)

2preg_replace,preg_filter

作用:在目标字符串中查找正则表示式,替换成其他字符串

普通字符串替换

str_replace(find,replace,string,count)

用法:

$str1 = preg_replace($pattern,$replacement,$subject);

$str2 = preg_filter($pattern,$replacement,$subject);

preg_filter特殊用法

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

$subject = array('weuy','r3ui','78as83','s','0ck9');

$replacement= array('''','')

$array1 = preg_replace($pattern,$replacement,$subject);

$array2 = preg_filter($pattern,$replacement,$subject);

//$array1 里面会返回全部数组,$array2里面元素只有发生匹配的才返回。

3preg_grep

用法,只匹配不替换。

preg_grap($pattern,array $input)

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

$subject = array('weuy','r3ui','78as83','s','0ck9');

4preg_splite

用法,分割目标字符串。

$array = preg_splite($pattern,$subject);

explode($str,$subject);

5preg_quote

用法,对目标字符串中可能存在的正则表达式运算符进行转义。

$str = 'qwer{asdf}[1234]';

$str = preg_quote($str);

//qwer{asdf}[1234]

总结

preg_match-验证表单

preg_replace-非法词语过滤

3、正则表达式基本语法

1界定符

/[0-9]/

*http://regexpal.com/

2原子,通常是unicode编码中的一个字符

可见原子,不可见原子。

汉字,'u7ea6u5417'-->'约吗',利用转化之后的编码进行匹配。

运算符符号,转义\,$,

不可见原子,空格、tab制表符、回车。

空格-->键盘空格,tab制表符--> ,回车-->

3元字符

原子的筛选方式,归类缩写。

-| 匹配两个或者多个,[^ ]

-[] 匹配括号中的任意一个

-[^] 排除方括号中的原子之外

Duang~|duang~ 匹配两种

[Dd]uang~[]中拿出一个。

[^789],必须是[^样式。[78^9]意义完全不同。

[a-zA-Z0-9_]连续的写法。

除了换行符之外的全部字符

任意十进制数字

非十进制数字

不可见原子

可见原子

任意数字字母_

非数字、字母_

4量词

{n},表示其前面的原子恰好出现n

{n,} 最少出现n

{n,m} 出现nm

*01次多次{0,}

+1次多次{1,}

?01{0,1}

例子 555->5{3}[a-zA-Z]{2},连续两个字符;w{4}w*,只要是数字字母连续匹配在一起的;

5边界控制和模式单元

l ^ 匹配字符串开始的位置

l $ 匹配字符串结束的位置

l () 其中的整体为一个原子

例子:***Duang

^Duang~,就不会匹配。此时强制D之前不会出现任何字符。~强制目标字符串必须以g结束,后面不可以有任意字符。

(D|d)uang,[Dd]uang

Duang duang 

(D|d)当做一个原子。

6修正模式

l 贪婪匹配

l 懒惰模式

发生多种匹配情况是,贪婪匹配比较长的,懒惰匹配短的。

例子:

$pattern = '/imooc.+123/';

$subject = 'i love imooc__123123123';

$matches = array();

preg_match($pattern,$subject,$matches);

$matches[0]='imooc__123123123';

默认情况下,是采用贪婪匹配。

$pattern ='/imooc.+123/U';

$matches[0]='imooc__123';

  • U-懒惰模式
  • i-忽略大小写
  • x-忽略空白
  • s-'.'匹配换行符在内的所有字符

例子:

$pattern ='/i Mo oc.+123/Uix';

$subject = 'I love imooc__123123123';

x忽略正则表达式中的空白字符

原文地址:https://www.cnblogs.com/birdskyws/p/4401616.html