正则表达式基础内容

一、正则表达式基础内容

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

写正则表达式的思路

  1. 先写出一个要匹配的字符串
  2. 自左向右的顺序使用正则表达式的院子和元字符进行拼接
  3. 最终加入模式修正符

例子:

  1. 使用utf-8匹配中文
$pattern = '/[\x{4e00}-\x{9fa5}]+/u';
  1. 判断手机号码
$pattern = "/^1[34578]\d{9}$/"; 
  1. 邮箱正则表达式
$pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/";
posted @ 2020-09-23 00:11  caibaotimes  阅读(248)  评论(0编辑  收藏  举报