PHP正则表达式一

正则表达式就是按照特定规则编写的具有特殊意义的字符串。

如果正则表达式不和函数一起使用,就只是一个字符串 将其放到某个函数(如分割函数、替换函数、匹配函数)中才能发挥出正则匹配的作用

正则表达式的组成:

原子:

\d  代表任意一个数字
\D  任意一个除了数字之外的字符
\s  匹配任意一个空白字符 空格 回车  \n  换行  \r  
\S  匹配任意一个非空白 
\w  匹配任意一个 a-zA-Z0-9_ 
\W  除了a-zA-Z0-9_之外的字符
[]  匹配[]中的任何一个原子 [12345]
[^] 除了[]里面的所有原子之外的字符  取反的意思  [^a-z123]

元字符:

*   表示本修饰原子的前面的字符可以出现0次或者多次
+   表示前面的字符可以出现1次或者多次
.   表示任意一个字符,除了换行符
^   表示开头必须是前面的字符
$   表示必须以前面的字符结尾
?   表示前面的字符可以出现0次或者1次
|   或者的关系
{}  自定义前面原子出现的次数  {5} 5次 {1,} 最少1次 {1,3} 1到3次
\b  匹配边界  两边如果有边界
\B  匹配非边界
()  作为大原子使用 括号里面的集合 可以看成一个大原子

模式修饰符:

i  匹配时不区分大小写

s 设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个修饰符,点号不匹配换行符

e  本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。

U 正则表达式默认是贪婪的,开启U后禁用贪婪模式

m (multiline 多行)默认情况下,匹配时将目标字符串作为单一的一行字符,即使目标字符串中有换行符也是如此,这种情况下,

    “行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅仅匹配字符串的结束(当最后一个字符是换行符时,$结束符匹配换行符前面的字符)

    当设定了此修正符,会进行多行匹配,换行符本身只被当做换行,可以不符合正则规定。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果。

 

举例1:

代码如下,正则模式为 /^\w+$/

1 <?php
2     $args = $_POST['args'];
3     if (!preg_match('/^\w+$/', $args)){
4         echo 'fail';
5         exit();
6     }
7     echo 'success';
8 ?>

输入:args=aaa     输出:success

输入:args=aaa%0a  输出:success    (最后字符是换行,$匹配换行前的字符)

输入:args=aaa%0ab    输出:fail    (换行符在字符串中间,且是单行匹配,而\n不符合\w原子,所以fail)

 

举例2:

把上面代码中正则模式改为  /^\w+$/m

输入:args=aaa    输出:success

输入:args=aaa%0a  输出:success

输入:args=aaa%0ab    输出:success  (有换行,且有m修饰符,多行匹配,第一行的aaa和第二行的b都符合原子\w+,所以success)

 

举例3:

1 <?php
2     $pattern = '/ab.*c/';
3     $subject = 'abcaxc';
4     $data = preg_replace($pattern, "hh", $subject);
5     echo $data;
6 ?>

输出:hh(默认是贪婪模式)

将$pattern 改为'/ab.*c/U',输出hhaxc (U懒惰模式)

posted @ 2016-01-07 14:45  sky钦  阅读(101)  评论(0)    收藏  举报