zoukankan      html  css  js  c++  java
  • 正则积累

    基本元字符 
    ^ 在字符组里面表示排除的意思,字符组外面表示行首。用法:^cat匹配所有以cat开头的行,[^0-9]匹配除了0-9之外的任何字符
    $ 行末

    [..]     匹配a或者b

    -        只在[]里面表示特殊意义,其他为普通字符串。用法:[1-8]表示匹配1-8中的任何一个数字
    .         在字符组外表示任一字符(除了换行符)。在字符组内表示平常使用的"."
    |         在字符组外表示匹配两个子表达式中的一个。这样一种结构叫做“多选结构”。用法:^(ABC|D|E), 匹配以ABC,或者D,或者E,开头的字符串
    ?        作用于紧接着它的前一个元素,表示前面的这个元素可以出现,也可以不出现。下限0,上限1。例如,au?则?作用于u。如果有()则作用与()里面的内容。例如,
    q(au)?中的?作用于au。
    +        至少匹配前面元素一次,下限1,上限不限制。
    *        和?+一样,都是量词。下限0,上限不限制。
    \        转义符。你懂的。

    提供的简记正则
    \t    制表符
    \n    换行符
    \r    回车符
    \s    任何空白字符(空格,制表符等)
    \S    除了\s以外的字符(非空字符)
    \w    等同于[a-zA-Z0-9]
    \W    除了\w以外的字符
    \d    等同于[0-9]
    \D    除了\d以外的字符


    常见组合:
    .*        匹配任意多字符。有点像我们平常查询用的*,不过要记住正则里面的*可不是匹配任意字符。



    注意点:
    贪婪匹配    注意".*"的使用。容易引起回溯
     
     
    (?s)
        是单行模式RegexOptions.Singleline,意识是.可以匹配回车换行。意思是忽略回车换行,把整个文本当单行一样处理。
    (?x)
        是忽略正则表达式中的空格。比如"(?x)te st" 是可以匹配test的。
    (?m)
        是 RegexOptions..Multiline,一般称为多行模式,意思是:更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,而不只是与整个字符串的开头和结尾匹配。
    .*?    
        表示尽量少的匹配,对于字符串“123456lll4”来说,比如说要匹配1和4之间的数值。如果用“1.*4”那么就会得到结果23456lll,如果用“1.*?4”那么匹配结果为23
    分组捕获
        通常会需要铺货某两个字符串之间的字符,这是可以用形如(?<id>.*)的方式来分组,然后在用match.Groups["id"].Value;来获得.*表示的值
     
    正则要注意贪婪,勉强与侵占匹配的区别。
    例如:
       String s = "为45M,为456M";
        pattern = Pattern.compile("为(.*)M").matcher(s);
     
    采用"为(.*)M"的时候就是贪婪匹配,程序会将s所有字符全部读入,然后进行匹配,当匹配失败时再从字符串右边减少一个字符然后再次进行匹配。
    而勉强匹配则和其相反,是一开始先读入一个字符进行匹配,匹配失败时再读入一个字符进行匹配,他的正则是":为(.*?)M"
    侵占匹配和贪婪的行为差不多只不过他不会后退而已。
  • 相关阅读:
    非标准的xml解析器的C++实现:二、解析器的基本构造:语法表
    非标准的xml解析器的C++实现:一、思考基本数据结构的设计
    lua5.4 beta中的to-be-closed变量的用法
    lua table与json的之间的互相转换高性能c++实现
    lua多线程共享数据的解决方案
    winsock完成端口套接字重用注意事项
    Less相关的用法以及Vue2.0 中如何使用Less
    1:MUI选择器组件抛出“n.getSelectedItem is not a function”异常的解决办法 2:mui三级联动 3:移动端关闭虚拟键盘
    redux状态管理和react-redux的结合使用
    初步学习React Router 4.0
  • 原文地址:https://www.cnblogs.com/qianlifeng/p/2122015.html
Copyright © 2011-2022 走看看