zoukankan      html  css  js  c++  java
  • 正则表达式详解

    1】、定义

    正则表达式是由一些特殊的符号(原符号,元子符,修正符)组成的表达式,主要是用来对字符串的分割、查找、匹配、替换等功能。

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    2】、作用

    1、查找某个字符串中是否具有某个表达式组成的字符串(表单内的各种验证)
    如:验证邮箱 qweqwe123ad@qq.com @ .

    2、使用某些字符串替换原字符串中符合正则的字符;(正则的字符串替换)
    $str1 = “这pian文章是个好文章,他讲述了PHP的原理”
    $str2 = '<a href="www.php.com">PHP</a>'
    preg_replace('/PHP/', $str2, $str1)

    3、取出某些字符串中符合正则的子字符串(小偷程序,采集程序)
    火车头

    4、url_rewrite (url地址重写)

    3】、分类

    PHP同时使用两套正则表达式规则,
    一套是由电气和电子工程师协会(IEEE)制定的POSIX Extended 1003.2兼容正则(事实上PHP对此标准的支持并不完善),检索速度慢,Windows下不可以使用,函数以 ereg_xxx() 开头;


    另一套来自PCRE(Perl Compatible Regular Expression)库提供PERL兼容正则,检索速度快,函数以 preg_xxx()开头。
    综上,实际只需掌握第二套即可。

    4】、组成

    【界定符】 一般 / 或 #
    【原符号】 最基本的字符,用来匹配字符串中的内容
    【元子符】 修饰原符号
    【修正符】 修饰整个表达式

    【原符号】:最基本组成单元,而且在每个模式中最少要包含一个原子
    按是否简写分:
    非简写,又可分为下面三类:
      1、普通原子 0-9、a-z、包括汉字,但汉字一般用Unicode编码代替:u4E00-u9FA5
      2、特殊字符作为原子,需使用转义符 ,包括:{} | [] () . ? + ^ $ *
      3、非打印字符簇,包括:

    f 分页

    换行

    回车

    制表符水平

    v 垂直制表符

    简写类:
    d:代表一个0-9的数字
    D: 反之,代表一个不是0-9的字符  //匹配非纯数字
    s: 匹配一个空字符串
    S: 匹配非空字符
    w: 匹配一个字母,数字和下划线
    W: 匹配除数字,字母,下划线以外的任意一个字符
     . :  匹配任意一个字符(除换行符 外)

     

    【元子符】: 用于修饰原符号

    1)、| 管道操作符,表示或的意思
    /1|2|3|4|5|6|7|8|9|0/ ===/d/ === [0-9]

    2)、[]:取一定范围的普通字符的一些字符作为正则模式的原子
    [a-z] a-z中的任何字符
    [0-9a-zA-Z_] 匹配的所有的普通字符

    3)、量词:修饰原字符的个数

    + : >=1 一个或一个以上的原子
    * : >=0 0个或者0个以上的原子
    ? : 0或者1 0个或者一个原子
    有边界限定的时候
    {n}: =n 恰好出现 n 次
    {n,} >=n 至少出现连续的 n次原子
    {n,m} >=n <=m 出现次数是n到m次的

    4)、():代表中间的字符是一个整体或后项引用
    /.*(abc){2,3}.*/ abcabc

    5)、行定位符,针对整个字符串而言

    ^:表示字符串开始处
    abcdefg
    /^a/ :字符串中以a开头

    $:表示字符串的结尾处
    /(ddd)$/ :以ddd结尾的模式 (com)$

    6)、[^]: 取反,排除字符

    /[^a]/:只要字符串中出现一个不是a的其他字符就符合
    /[^a-d]/:只要字符串中出现一个不是a、b、c、d的其他字符就符合
    /[^a]d/ : 只要匹配一个 xd,x不能为a
    /[^a-d]{3}/
    /[^(a|b|c)]d/ 排除ad,bd,cd外的其他字符

    【修正符】:用来修饰整个正则表达式,在界定符后面

    i (ignore):不区分大小写;

    /abc/i ABC aBc Abc
    m :将字符串通过分隔符进行分割,将字符串中的每一行分别进行匹配。
    s :将字符串视为一行,默认按照一行一行的匹配;
    x :忽略正则表达式中的空白;
    U :取消贪婪模式,第一次匹配后停止(非贪婪,默认是贪婪模式);
    D: 修正 "$" 对 " " 的忽略;
    u: 做 utf-8 中文匹配的时候使用;
    g:该表达式可以进行全局匹配。

    5】、常用函数

    preg_match() | 进行正则表达式匹配
    preg_match_all() | 进行全局正则表达式匹配
    preg_replace() | 执行正则表达式的搜索和替换

    工作中PHP其实用到的函数并不多,大多验证工作都放在前端,基本上上面3个函数完全可以搞定,具体用法可参看PHP官网。

    6】、常用正则表达式

    1、表单输入框只输入数字

    onkeyup="value=this.value.replace(/[^d.]/g,'')"

    说明:
    1、表达式的三个主要组成部分,原符号、元字符、修正符,很多资料里的名称不统一,分类也比较混乱,上面是按我个人的理解重新做的分类。
    2、PHP其实用到的正则匹配并不多,基本要求是会看,看到表达式能立马看出可能匹配的目标字符串是什么样的,其次是会写简单常见的表达式,碰到复杂的一般都上网搜了。
    3、正则表达式非常灵活,按以上规则可组成无穷无尽的,很多跟天书似的,这是最难的,至于PHP的匹配函数看手册基本都能看懂,所以上面没做过多介绍。

  • 相关阅读:
    Android实战技巧之六:PreferenceActivity使用详解
    Gradle for Android 第三篇( 依赖管理 )
    From 虚拟机模板 创建单节点K8S1.14.1的操作步骤
    Android实例剖析笔记(二)
    Android实例剖析笔记(一)
    Android 传感器
    Eclipse:引用一个项目作为类库(图文教程)
    Android Studio导入Project的方法
    Android Studio导入GitHub上的项目常见问题(有例子)
    AndroidStudio导入项目常见问题
  • 原文地址:https://www.cnblogs.com/jiaoran/p/12485271.html
Copyright © 2011-2022 走看看