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懒惰模式)

浙公网安备 33010602011771号