正则表达式

夙愿已清 提交于 2020-01-18 13:54:35

正则表达式

1、正则表达式的概念

使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

2、使用场景
  • 批量提取/替换有规律的字符串
  • 在各种高级的文本编辑器中使用
  • 在各类办公软件(office)中使用
  • 用户输入合法性检验
  • 网络爬虫(抓取机器人)的开发
  • 批量的文本高效处理
3、正则表达式测试工具
4、元字符的概念及元字符的反义
元字符 说明
. 匹配除了换行符以外的任意字符
\w 匹配字母或数字下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
5、转义的概念以及正则表达式中的使用

转义字符\

  • \.
  • \*
  • \?
6、正则表达式语言中的注释方法
7、分支条件
  • |把不同的规则分隔开
  • 从左到右地测试每个条件,如果满足了某个分支的话,就不会再去管其它的条件
  • 0\d{2}-\d{8}|0\d{3}-\d{7}
8、几种重复模式
语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
9、字符类
  • [0-9] == \d
  • [a-z0-9A-Z]=\w
  • [&A?.]
  • [aeiou]
  • \(?0\d{2}[)-]?\d{8}
9、分组的概念
  • 将子表达式进行做成子集
  • 使用()分组
  • 方便对match的字符串进行划分
  • (\d{1,3}\.){3}\d{1,3}
  • 分组的命名:(?<groupname>exp)
  • (?:exp):匹配exp,不捕获匹配的文本,也不给此分组分配组号
10、分组的命名模式
11、分组的用途
12、正则表达式中的贪婪和懒惰
  • 贪婪(尽可能多)

    a.*b(aabab)->aababa

  • 懒惰(尽可能少)

    匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最好的重复

    a.*?b(aabab)->aab

  • 语法

    语法 说明
    *? 重复任意次,但尽可能少重复
    +? 重复1次或更多次,但尽可能少重复
    ?? 重复0次或1次,但尽可能少重复
    {n,m}? 重复n次到m次,但尽可能少重复
    {n,}? 重复n次以上,但尽可能少重复
  • 处理选项(RegexOptions)

    语法 说明
    IgnoreCase 指定不区分大小写的匹配。
    Multiline 多行模式。更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。
    ExplicitCapture 指定有效的捕获仅为形式为 (?…) 的显式命名或编号的组。这使未命名的圆括号可以充当非捕获组,并且不会使表达式的语法 (?:…)显得笨拙。
    Singleline 指定单行模式。更改点 (.) 的含义,使它与每一个字符匹配(而不是与除 \n 之外的每个字符匹配)。
    IgnorePatternWhitespace 消除模式中的非转义空白并启用由 # 标记的注释。但是,System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace值不会影    响或消除字符类中的空白。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!