zoukankan      html  css  js  c++  java
  • 正则表达式学习笔记

    前言

    之前学习其他知识时,经常见到正则表达式,一开始不以为然,后来见得多了,觉得这东西肯定挺叼的,有必要学一学了,因此从网上找了一些资料开始学习,去google搜一下,教程倒是蛮多的,但是不知道哪个易学些,走马观花式的看了一段时间,基本掌握了,但是学的不系统,有一天到张子阳的一篇博文,觉得写的很好,就去看了看他的主页,发现子阳兄也写过正则表达式教程,怀着对子阳兄的崇敬之情,看的很带劲呢,一下午就看完了,感觉棒棒的。

    正则表达式是什么

    它是用来准确查找文本的,或返回查找结果,或进行内容替换;反过来,它可以对输入的信息进行格式验证。

    正则表达式学什么

    正则表达式可以当一个工具来学,基本的、常用的会用即可,不常用的学了也会忘掉,本着这个目的,我将从用途不同对正则表达式的知识进行分类。

    简单匹配

    匹配单个字符

    重点学习“.”、“?”、“[ ]”、“s”、“d”、“w”和“”

    • “.”:匹配任意单个字符
    • “?”:匹配0个或1个特定字符(它的前一个字符)
    • “[ ]”:匹配几个字符中的一个字符
    • “s”:匹配空字符,包括空格、Tab、回车符、换行符,相当于[f v]
    • “d”:匹配单个数字,相当于[0-9]
    • “w”:匹配单个大小写字母、数字、下划线,相当于[a-zA-Z0-9_]
    • “”:转义字符,匹配有特殊意义的字符,如“.”或“?”

    此外,sdw的反义匹配是SDW,也就是匹配非空字符、非数字字符和非【大小写字母、数字、下划线】字符

    学会这些,基本的查找功能就可以搞定啦。

    例子后续补充

    中级匹配

    匹配多个字符

    重点学习“+”、“*”、“^”、“$”、“{ }”、“”

    • “+”:匹配1个或多个特定字符(它的前一个字符)
    • “*”:匹配0个或多个特定字符(它的前一个字符)
    • “^”:匹配文本首,用在“[ ]”中代表匹配反义词,如[^0-9]匹配非数字
    • “$”:匹配文本末
    • “{ }”:匹配指定数目的特定字符(它的前一个字符)
    • “”:匹配字符边界(分割单词的边界,下划线除外)
    • “B”:与“”相反,匹配【非单词】边界(也就是字母或汉字)

    例子后续补充

    高级匹配

    含有子模式和惰性模式的匹配

    重点学习“( )”、“|”、“贪婪匹配与惰性匹配”

    • “( )”:将括号内的字符串当作一个整体来匹配,看作一个字符,如(good),文本中包含“good”时才匹配,“god”和“ood”都不会匹配到
    • “|”:“或”匹配,匹配两个正则表达式中的任意一个,如“good|bad”,匹配包含good或bad,也可以用在“( )”中
    • 贪婪匹配:默认匹配模式。它会匹配尽可能多的字符。它首先看整个字符串,如果不匹配,对字符串进行收缩;遇到可能匹配的文本,停止收缩,对文本进行扩展,当发现匹配的文本时,它不着急将该匹配保存到匹配集合中,而是对文本继续扩展,直到无法继续匹配 或者 扩展完整个字符串,然后将前面最后一个符合匹配的文本(也是最长的)保存起来到匹配集合中。所以说它是贪婪的。
    • 惰性匹配:它会匹配尽可能少的字符,它从第一个字符开始找起,一旦符合条件,立刻保存到匹配集合中,然后继续进行查找。所以说它是懒惰的。

    下面是贪婪匹配与惰性匹配的字符差别:

    例子后续补充

    后记

    这篇文章是我学习这篇教程的总结与思路整理,总结的也不太好,希望看到它的人可以从中学到,有什么问题欢迎讨论~

  • 相关阅读:
    curl库使用文件传输
    linux 命令
    第三方库交叉编译
    指针越界
    GetWindowRect GetClientRect
    libevent
    C#关闭窗体
    C# log日志窗口
    C++同一时刻仅允许一个实例,包含多用户的场景。
    C# 引用类型
  • 原文地址:https://www.cnblogs.com/zhangyunhao/p/4678502.html
Copyright © 2011-2022 走看看