美文网首页
1.正则基础

1.正则基础

作者: iPhone | 来源:发表于2019-11-28 16:52 被阅读0次

[图片上传中...(截屏2019-11-28下午5.07.24.png-1d936f-1574932062286-0)]

1.转义

转义.png

2.限定符

限定符.png

3.特殊字符

特殊字符.png
1.123b$
   -- 以123b 结尾
2.(v{2,3})$
   -- () 子表达式
   -- 以2或3个v结尾
3. [a-z]*
     -- 有0个以上的小写字符
4.[a-z]+
     -- 有1个以上的小写字符
5.  .+
   -- . 匹配任意单字符 除了\n
   -- 有1个以上的字符
6.c?
   -- 0个或1个c
 7. a+?
    --a+: 有1个以上的a
    -- a+?: 只会取+的最小值(即非贪婪),也就是只能有一个a
8. ^12[a-z]+
    -- 以12开始后面多个小写字符
9.^12[^a-z]+
   --以12开始,但是12后面不能有小写,但是必须有字符
10.^(a|Z|c)[0-5]+
    -- Z12321313 以a/Z/c开始,有多个0-5的整数

4.正则表达式中的选项

正则表达式中的选项.png
1. (?i)the
      -- 不区分大小写匹配the     eg:The rime of the Ancyent Mariner

5.命名分组的语法

命名分组的语法.png
1. 0{3}
   -- 三个0
2.(?<z>0{3})
   -- 三个0为一组,名字是 <z>
3.(?<z>0{3})\k<z>\k<z>
    -- 三个0为一组,向后引用    结果是匹配九个0

6.定位符

定位符.png
1. \b 边界
      eg: 23\b
            -- 23 ab
            -- 123 ab
 2.\B非边界
     eg: 23\B
          -- 234 ab
          -- 1234 ab

7.选择

1.用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,使相关的匹配会被缓存 eg:(a|b)
2.此时可用?:放在第一个选项前来消除这种副作用。 eg:(?:a|b)
3.正向预查肯定符号:?=
    -- 表示对后面边界的肯定匹配要求
4.正向预查否定符号:?!
    --表示对后面边界的否定匹配要求

备注: 3,4都是匹配但是不获取,即选择不获取

5. \b([a-z]+) \1\b   引用
    eg: 1 is is ab ab 2 a a 3 33 33 
     -- 边界开始多个小写, 空格 \1 是对前面()的完全引用
     --
     --后向引用,引用的仅仅是文本内容,而不是正则表达式!也就是说,组中的内容一旦匹配成功,后向引用,引用的就是匹配成功后的内容,引用的是结果,而不是表达式。

8.其他

(?i)不区分大小写CASE_INSENSITIVE(Java 轻微影响性能)
(?m)多行模式(^和$匹配整个字符串的头尾)MULTILINE
(?s)点号通配模式(.匹配任意字符)DOTALL

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

截屏2019-11-28下午5.07.24.png

模式修正符

3、模式修正符

以(?)开头的非捕获组除了零宽度断言之外,还有模式修正符。

正则表达式中常用的模式修正符有i、g、m、s、x、e等。它们之间可以组合搭配使用。

(?imnsx-imnsx: ) 应用或禁用子表达式中指定的选项。例如,(?i-s: ) 将打开不区分大小写并禁用单行模式。关闭不区分大小写的开关可以使用(?-i)。有关更多信息,请参阅正则表达式选项。

【例1】(?i)ab

表示对(?i)后的所有字符都开启不区分大小写的开关。故它可以匹配ab、aB、Ab、AB

【例2】(?i:a)b

它表示只对a开启不区分大小写的开关。故它可以匹配ab和Ab。不能匹配aB和AB。 

(?>Pattern)等同于侵占模式

4、(?>Pattern)等同于侵占模式

匹配成功不进行回溯,这个比较复杂,与侵占量词“+”可以通用,比如:\d++ 可以写为 (?>\d+)。 

【例】将一些多位的小数截短到三位小数:\d+\.\d\d[1-9]?\d+

在这种条件下 6.625 能进行匹配,这样做没有必要,因为它本身就是三位小数。最后一个“5”本来是给 [1-9] 匹配的,但是后面还有一个 \d+ 所以,[1-9] 由于是“?”可以不匹配所以只能放弃当前的匹配,将这个“5”送给 \d+ 去匹配,如果改为:

\d+\.\d\d[1-9]?+\d+

的侵占形式,在“5”匹配到 [1-9] 时,由于是侵占式的,所以不会进行回溯,后面的 \d+ 就匹配不到任东西了,所以导致 6.625 匹配失败。

这种情况,在替换时就有效了,比如把数字截短到小数点后三位,如果正好是三位小数的,就可以不用替换了,可以提高效率,侵占量词基本上就是用来提高匹配效率的。

把 \d+\.\d\d[1-9]?+\d+ 改为 \d+\.\d\d(?>[1-9]?)\d+ 这样是一样的。 

====== 更新

\d  任何一个数字字符(等价于[0-9])
\D  任何一个非数字字符(等价于[^0-9])
\w  等价于[a-zA-Z0-9]
\W  等价于[^a-zA-Z0-9]
\s  任何一个空白字符(等价于[\f\n\r\t\v])
\S  任何一个非空白字符(等价于[^\f\n\r\t\v])

相关文章

  • 1.正则基础

    [图片上传中...(截屏2019-11-28下午5.07.24.png-1d936f-1574932062286-...

  • Java基础:正则表达式

    相关阅读 Java基础:String类 Java字符串格式化 Java基础:正则表达式 1. 正则表达式概述 正则...

  • 正则表达不再靠control+v(实操篇)

    1. 前言 前面的正则的基础语法了解之后,正式开始实际应用 对基础知识感兴趣的可以看看我写的基础篇 《正则表达不再...

  • 使用正则筛选字符串

    1. 正则基础应用 2. //遍历所有字符串打印结果 3. RegexKitLite 框架强大的正则辅助框架...

  • shell编程- 四剑客

    1.四剑客 2.正则表达式 基础正则 扩展 正则 perl正则 注意事项: 一行一行过滤 注意字符集:export...

  • week4 linux 正则表达式

    1.正则表达式 1.1用处:帮助我们快速过滤文件 1.2分类: 基础正则 (BRE Basic regular e...

  • 正则表达式的使用

    1.正则表达式的语法 iOS开发中正则表达式的基础使用 2.正则表达式不常用的语法 Q:经常看见的正则前面的 (?...

  • JavaScript千分位加逗号【正则拆解教程】

    正则参考答案: 正则表达式拆解 1. 基础知识 x(?=y) 【先行断言】匹配“x”仅仅当“x”后面跟着“y”例如...

  • 手机号正则表达式验证

    基础方法 /** 基础方法 @param regex 正则表达式 @return 正则验证成功返回YES, 否则返...

  • 三剑客

    二. 2.1正则表达式概述 2.2正则分类 re (regular expression) 基础正则 b...

网友评论

      本文标题:1.正则基础

      本文链接:https://www.haomeiwen.com/subject/bfdbwctx.html