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

    正则表达式,Regular Expression ,缩写为regex regexp、RE等

    在编程中,最常打交道的就是字符串,处理最多的就是字符串,

    正则表达式是文本处理领域最常用的技术,对字符串按照某种规则检索,或者替换字符串

    分类:

    BRE :基本的正则表达式,grep、sed、vi等软件支持,vim有扩展

    ERE : 扩展的正则表达式,egrep(rgrep-E),sed-r等

    PCRE : (Perl Compatible Regular Expressions),几乎所有语言都是PCRE的方言或变种,Python从1.6开始使用SRE正则表达式引擎,可以理解为PCRE的子集,见模块re。

    基本语法

    元字符 metacharacter

    .点,匹配除换行符外的任意一个字符,在Windows下回车换行是两个 ,有时正则表达式会留下一个回车,处理时要注意

    [abc] 匹配一个字符,包含在集合中的任意一个字符,[abc]匹配plain中的a

    [^abc]除abc外的一个字符,只匹配一个,匹配plain中的'p','l','i','n'

    [a-z] 字符范围,也是一个集合,只匹配一个字符

    [^a-z] 字符范围,也是一个集合,只匹配一个字符,除其中的字符

     匹配单词的边界,b表示在文本找到b开头的单词,b为以b结尾的

    B 匹配不是字符的边界的字符,

    d 匹配[0-9]中的一位

    D 匹配一位非数字

    s 匹配一位空字符

    S 匹配一位非空白字符

    w 匹配[a-zA-Z0-9_],包括中文的字,不匹配符号,支持uncode字符,匹配时注意行尾的回车换行,

    W 一位非文字

    \, , 原意,加转义符来表达原意

    多位匹配贪婪模式,匹配找到的最长的字符

    * 多次匹配,零或者以上任意次 ,使用.*是注意范围,模式会影响找到的内容,单行模式有可能找到的并不是你要的,

    + 至少一个,{1,}

    ? 有无{0,1}

    {n} 固定重复次数

    {n,}  重复n次及以上

    {0,} 相当于*,{1,}相当于+

    {n,m} {0,1} n要小于m

    x|y 匹配 x或者y 注意w|food 和(w|f)ood 的区别,前者会找到w,food

    () 分组,或者捕获,使用捕获后会自动分配组号,从1开始,可以改变优先级,匹配带来分组,没有匹配到就不会有分组

    (very)s+1 引用分组号1, s+表示中间空白字符一个以上

    (?:w|f)ood 表示括号改变优先级,不分组

    ((?:w|f)ood) 表示分组组名food,wood

    (?:<name>exp) python中使用(?P<head>w|f)ood 命名分组

    零宽断言

    断言不是分组

    f(?=ood) (?:=)断言只是条件,不参与匹配,匹配f,ood是条件

    (?<=f)ood 匹配ood,f只是条件

    负向零宽断言

    (?!) 断言f(?!ood)f后一定不是ood,

    (?<!)

    (?#commend) 注释,少用。写在表达式前后

    分组和捕获意思相同

    使用时,能用简单就不用复杂

    贪婪和非贪婪,

    捕获的内容或匹配的内容不同

    (.*?) 找到的内容,非贪婪

    *? 匹配任意次,尽可能少

    ??

    +?

    {2,}? 相当于{2}

    ?? 和*? 单独使用没有意义,找啥?

    加在重复的选项上

    引擎的选项

    ignoreCase 忽略大小写

    Singleline

    Mulitline

    单行模式可以突破换行符,控制的是换行符,控制的是点能否匹配到换行符

    . 点可以匹配包括换行符的字符

    ^ $ 表示整个字符串的开头和结尾

    多行模式

    . 匹配除换行符外的所有字符

    ^$ 控制行首行尾,多行匹配行首尾

    结尾注意 加 ?,win下有问题

    socket 库,筛选ip地址

    从分组组名中提取数据

    分隔符取反

    你想要的数据中(最不可能出现的值可以作为你取反的值)来求你要的值


    取1-999的数字
    [1-9]d|[1-9]d|d
    [1-9]?dd?
    (?!0)d{1,3}

    25[0-5]|2[0-4]2[0-4]|1d{0,2}|0

  • 相关阅读:
    Hibernate实体对象三种状态
    tar命令: 对某目录文件打tar包时,排除指定的目录或文件
    开发项目时,提示 找不到类的解决方法,以及如何设置编译源目录
    当html中存在url中如: onclick="toView('参数1')", 参数1是特别字符,如&asop;&quot;' "等时,浏览器解析时会报错。解决方法如文中描述
    oracle表分区心得
    启动系统相关服务笔记整理
    使用PSD设计网页页面
    JAR、WAR、EAR 区别
    设置 MyEclipse 默认打开文件方式
    前端性能优化
  • 原文地址:https://www.cnblogs.com/rprp789/p/9608091.html
Copyright © 2011-2022 走看看