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

    正则匹配实际上可以看做是一种属性匹配,一个字符串中,他的每个字符可以看做是一个实体,字符中间的缝隙也可以看做是实体,他们的属性包括内在属性和关联属性(该属性取决于字符的外部环境),每个属性标记代表的是一个属性集合,小的集合构成大的集合从而形成整体属性。

    三个基本操作

    1.regex_match判断目标字串是否匹配指定的正则表达式

    2.regex_search在目标字串中寻找匹配指定正则式的字串

    3.regex_replace 在目标字串中寻找匹配指定正则式的字串,之后用预设的字串替换这些匹配的字串

     每次匹配应该包含三个主要元素,1)目标字串 2)正则式 3)匹配结果

    属性标记分两类:

    1)字符属性标记

    • 内在属性表示字符本身的含义,例如d . v s cletter[class] [^class]
    • 关联属性,例如w(一个单词) 、重复次数* + ? {int,int} ,对于"aaa",我们可以用“a{3}”,这三个a本来都是独立的个体,但是他们放在一起就又具有了关联属性(就是重复三次),对第一个a而言,他的右边也是一个a,同时他右边这个a的右边也是一个a,因此第一个a可以匹配 a{3},同样第二三个a也匹配该属性。

    2)位置属性标记

    • 他的内在属性很简单,就是一个位置
    • 一个位置根据所处的外部环境不同就形成了多样的关联属性 ^ $  ?= ?<,位置不会有重复次数这种关联属性

    --------------------------------------------------------------------------------------------------------------------------

    对于匹配结果有下面几个结果提取符号可用

    $n 代指第n个分组的子串

    $& 代指当前匹配到子串

    $$ 代指符号本身

    需要转义的字符

    1. $ ---> $  
    2. ( ---> (  
    3. ) ---> )  
    4. * ---> *  
    5. + ---> +  
    6. . ---> .  
    7. [ ---> [  
    8. ] ---> ]  
    9. ? ---> ?  
    10.  ---> \  
    11. / ---> /  
    12. ^ ---> ^  
    13. { ---> {  
    14. } ---> } 

    还有一种平衡组的用法, 主要使用下面几个功能

    (?'group'exp) 将exp压入堆栈

    (?'-group'exp) 将exp弹出堆栈

    (?(group)yes|no)检查堆栈中是否含有exp 然后继续匹配yes 或no分支

    (?!)回顾断言,不能匹配任何东西,可以作为yes 或no条件

    相信世界是平的
    谨记四个字“修身养性”
    大江东去浪淘尽英雄,再牛B的人物最后也是一掊土
    向善不是目的,而是抚慰心灵,更多的感受幸福,感谢别人给你行善的机会
    相信老子的话:万物生于有,有生于无,一切的道理都源于一个无法证明的假设
    我是好是坏就自然而然的摆在那里,并不会因为别人的评价而改变什么,我也不需要别人用一张纸来说明我什么,世间最难得的是自由



    支持大额赞助:
  • 相关阅读:
    Moebius实现Sqlserver集群~介绍篇
    知方可补不足~SQL数据库用户的克隆,SQL集群的用户同步问题
    从零开始学C++之动态创建对象
    [置顶] 某大型银行深化系统技术方案之二十五:性能设计之主要数量指标
    POJ 1300 Door Man
    解决SQL查询总是超时已过期
    hdu 1728 逃离迷宫(BFS)
    Nginx 负载均衡-加权轮询策略剖析
    ios 6 横竖屏转换
    firefox同步数据时无响应问题
  • 原文地址:https://www.cnblogs.com/sky-view/p/3917959.html
Copyright © 2011-2022 走看看