正则表达式基础内容
一、正则表达式基础内容
1、通用原子:
- \d : 数字。 \D : 除了数字。
- \w : 数字,字母,下划线。\W : 除了数字,字母,下划线。
- \s : 空白符 。 \S : 除了空白符 。
2、元字符:
.
:除了换行以外的所有字符*
: 0 次或多次(匹配前面的内容)- ? : 0 次或 1 次(匹配前面的内容)
-
- : 一次或多次(匹配前面的内容)
- ^ : 必须以它开头。
- $ : 必须以它结尾。
- {n} : 恰巧出现 n 次。
- {n,} : 大于等于 n 次。
- {n,m} : 大于等于 n, 小于等于 m.
- [] : 匹配中括号中的任意一个字符(是一个集合),如:[abc]即为匹配a或b或者c。
- () :
后项引用 或者是当做一个整体。
[^]
: 取反。- | : 或者
- [-] : 代表一个范围,如[0-9],匹配即为 0123456789
3、模式修正符
- i:不区分大小写。
- m:将字符串通过分隔符进行分割,将字符串中的每一行分别进行匹配。
- e: 将匹配出来的内容做一些php语法上的处理。
- s: 修正 "." 的换行。
- U: 取消贪婪模式。
- x: 忽略模式中的空白符。
- A: 必须以这个模式开头。
- D: 修正 "$" 对 "\n" 的忽略。
- u: 做 utf-8 中文匹配的时候使用。
- g:该表达式可以进行全局匹配。
php 正则表达式中的 .*? 表示什么意思?
是非贪婪模式
.*?
来取消贪婪
.*会匹配后面的一切字符,就是到结束的意思
加?后就是不贪婪模式,这时要看?后边的字符是什么了,如.*?"的意思是遇到双引号则匹配结束
.*?>的意思是遇到>则匹配结束
例如:
写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
<?php
$script="以下内容不显示:<script language='javascript'>alert('cc');</script>";
$pattern = "/<script[^>].*?>.*?</script>/si";
echo preg_replace( $pattern ,"替换内容", $script);
?>
二、后项引用
$str = '<b>abcd</b>';
$pattern = '/<b>(.*)<\/b>/';
preg_replace(pattern, '\\1', $str)
如果想只去除掉b标签,只保留里面的字符串,这里就需要用到后项引用。怎么样后项引用呢,就是将.*
括起来,然后在匹配的时候,写上 \1
,\1
代表第一个括号里面匹配到的内容,当然为了防止 \
将 1
转义掉,所以我们使用\\1
。
写正则表达式的思路
- 先写出一个要匹配的字符串
- 自左向右的顺序使用正则表达式的院子和元字符进行拼接
- 最终加入模式修正符
例子:
- 使用utf-8匹配中文
$pattern = '/[\x{4e00}-\x{9fa5}]+/u';
- 判断手机号码
$pattern = "/^1[34578]\d{9}$/";
- 邮箱正则表达式
$pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/";