• 教你从零开始学习java正则表达式!


    正则表达式

    正则表达式大家应该都不陌生,我今天从零开始介绍我自己的学习经验和步骤!

    字符组

    在一对方括号 [ 和 ] 之间列出所有可能出现的字符,包括可见以及不可见的字符;例如:

    [123]

    表示可以匹配1、2、3的单个字符。

    1字符组的范围表示

    如果可以匹配的字符有规律性并且范围比较大,比如0、1、2、3、4、5、6、7、8、9,表达式写成

    [0123456789]

    这样就显得复杂也不美观,所以引入符号“-”,使用 [x-y] 的形式表示在闭区间x到y范围内的字符,上式可以写成

    [0-9]

    【注意】:-范围表示法必须遵循ASCII编码的先后顺序,即上式不可写作 [9-0] ,而一些令人困惑的表达式也尽量不要使用,比如 [0-z] 因为该式涵盖了在ASCII编码表中从0到z的全部字符(不仅仅只有数字和小写字母)。如果想要表示多个范围,比如匹配数字、大写字母和小写字母,表达式可以写作

    [0-9a-zA-Z]

    2元字符与转义

    在表达式中有特殊功能而不作为字符的一部分字符,称为元字符。比如前文讲过的:[ ] - 都是元字符,如果想要恢复它们本来的字符属性就要做一些特殊处理。先看一般情况,取消元字符特殊含义的操作叫做转义,操作是在表达式中的元字符前加反斜杠 。特殊情况就是表示范围的横线 - ,当其紧邻左方括号 [ 时就作为普通字符处理,其他情况都作为元字符表示范围。

    【注意】

    1、横线 - 也支持反斜杠的转义,即[0-9]表示0、-、9三个字符。

    2、右方括号 ] 不需要转义。

    3排除型字符组

    当需要表示的字符组范围很大,写起来不方便,而恰巧它的补集(全集指所有字符)方便表示,引出了排除型字符组[^…] ,表示在当前位置匹配一个没有列出的字符,请注意是“必须匹配一个没有出现的字符”,而不是“不要匹配列出的字符”。例如:

    [^0-9][^0-9]

    可以匹配“QQ”,但不可以匹配“Q”。

    【注意】紧跟在 ^ 之后的 - 不是一个元字符!而^自身也是元字符,当且仅当^紧跟[时,否则表示它作为字符的含义。

    4字符组简记法

    常见的字符组简记法有d([0-9])、w([0-9a-zA-Z_])、s([ vf])

    【注意】w可以匹配下划线,不等价于[0-9a-zA-Z]。另外字符组简记法可以单独出现,也可以使用在字符组中,如

    `[0-9a-zA-Z]`可以写成`[da-zA-Z]`

    正则表达式也提供了上面三种常用简记法的排除型:D、W、S,这三种分别对应各自的补集(全集是指所有字符,即[dD]可以匹配任意字符,剩余二者同理)。

    【再次注意】第一,使用字符组简记法最好不要出现单独的 - ;第二,上面描述的简记法都是针对ASCII编码而言的;第三,字符组简记法不止这三种,还有其他(也可能根据不同的编程语言衍生出新的简记法),等遇到了再说。

    5字符组的运算

    当我们所研究的问题要求我们的全集不是所有字符,排除型字符组就显得不是那么的好用了。比如我需要匹配字母表第1、5、9个小写字母,把所有字符看作全集显然不合适,而把所有小写字母看作全集就比较合适,但是写成[b-df-hj-z]就比较复杂而且容易搞错,Java就允许使用逻辑与(&&,也可以理解为取交集)来解决这个问题,即写成:

    [a-z]&&[^aei]

    喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!需要更多java学习资料的也可以私信我!

    祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早生贵子,从不掉发!

  • 相关阅读:
    OD基础2
    OD基础1
    ASCII
    CE基础
    逆向3.OD插件添加及 ODBG2_Pluginnotify配合PN_NEWPROC反反调试
    逆向2.添加插件DEMO
    逆向1.检测程序是否被调试
    C# 下载模板
    layui table 中固定列的行高和table行高不一致
    sql datetime类型数据如果进行模糊查询
  • 原文地址:https://www.cnblogs.com/heqingxiaohuo/p/12176916.html
Copyright © 2020-2023  润新知