zoukankan      html  css  js  c++  java
  • 5分钟轻松学正则表达式

    正则表达式是什么?

    正则表达式,是一个表达式,用少量的简单字符,来表示复杂的长字符串。

    实际工作用到很多,比如日志搜索、查找替换、JMeter 响应数据提取等。

    先看一个例子,用户名包含字符、数字、下划线和连字符,并限制字符的个数:

    这个表达式可以接受 john_doejo-hn_doejohn12_as,但是无法匹配到 Jo,因为它包含了大写的字母而且太短了。

    字符匹配

    正则表达式之所以强大,是因为通过一些特殊字符,能让它匹配到更多字符串。

    .

    匹配任意单个字符除了换行符。

    例:.ar => The car parked in the garage.

    [ ]

    字符集。匹配方括号内的任意字符。并且字符是无先后顺序的。

    例:[Tt]he => The car parked in the garage.

    方括号的句号就表示句号。

    例:ar[.] => A garage is a good place to park a car.

    [^ ]

    否定的字符集。匹配除了方括号里的任意字符。

    例:[^c]ar => The car parked in the garage.

    *

    匹配 >= 0 个重复的在 * 号之前的字符。

    例:a* => babaa123.

    例:[a-z]* => The car parked in the garage #21.

    * 字符和 . 字符搭配可以匹配所有的字符 .*

    +

    匹配 >= 1个重复的 + 号前的字符。

    例:c.+t => The fat cat sat on the mat.

    ?

    标记 ? 之前的字符为可选,即出现 0 或 1 次。

    例:[T]?he => The car is parked in the garage.

    {n,m}

    匹配 num 个大括号之前的字符或字符集 (n <= num <= m)。

    例:[0-9]{2,3} => The number was 9.9997 but we rounded it off to 10.0.

    可以省略第二个参数,表示至少。

    例:[0-9]{2,} => The number was 9.9997 but we rounded it off to 10.0.

    逗号也省略掉则表示重复固定的次数。

    例:[0-9]{3} => The number was 9.9997 but we rounded it off to 10.0.

    (xyz)

    字符集,匹配与 xyz 完全相等的字符串,括号内的被视为一个整体。

    JMeter 中,通过小括号来提取字符串中的子字符串。

    例:"token":"(.*?)","expired_at" => "token":"123","expired_at"

    |

    或运算符,匹配符号前或后的字符。

    例:"(T|t)he|car" => The car is parked in the garage.

    ^

    字符串开头。

    例:"^(T|t)he" => The car is parked in the garage.

    $

    字符串结尾。

    例:"(at.)$" => The fat cat. sat. on the mat.

    转义

    对于正则表达式的这些特殊字符:

    { } [ ] ( ) / \ + * . $ ^ | ?
    

    如果需要匹配,那么需要使用反斜杠 \ 进行转义。

    例:"(f|c|m)at\.?" => The fat cat sat on the mat.

    简写字符集

    简写 描述
    . 除换行符外的所有字符
    \w 匹配所有字母数字,等同于 [a-zA-Z0-9_]w是word首字母
    \W 匹配所有非字母数字,即符号,等同于: [^\w]
    \d 匹配数字: [0-9]d是digital首字母
    \D 匹配非数字: [^\d]
    \s 匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]s是space首字母
    \S 匹配所有非空格字符: [^\s]
    \f 匹配一个换页符
    \n 匹配一个换行符
    \r 匹配一个回车符
    \t 匹配一个制表符
    \v 匹配一个垂直制表符
    \p 匹配 CR/LF(等同于 \r\n),用来匹配 DOS 行终止符

    贪婪匹配与非贪婪匹配

    正则表达式默认是贪婪匹配,也就是会尽可能多的匹配字符串。可以使用 ? 将贪婪匹配模式转化为非贪婪匹配模式。

    例:

    默认贪婪:

    使用 ? 转为非贪婪:

    忽略大小写

    不同编程语言写法不同,比如 Python 可以通过 re.compile('pattern', re.I) 来忽略大小写。

    在线测试

    https://tool.oschina.net/regex/

    简要回顾

    本文首先通过一个例子介绍了正则表达式是什么样子的,接着对字符匹配的特殊字符进行了讲解和示例说明,然后给出了简写字符集。正则表达式默认是贪婪模式,可以使用 ? 来转为非贪婪。也可以添加参数,让正则表达式忽略大小写等。最后给出了在线测试正则表达式地址,方便调试看结果。本文内容已经足够在工作中使用,更多高级用法可以通过参考资料进一步阅读。

    参考资料:

    https://en.wikipedia.org/wiki/Regular_expression

    https://docs.python.org/3/library/re.html

    https://github.com/ziishaned/learn-regex

    https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

  • 相关阅读:
    HDU 5409 CRB and Graph (边双连通+DFS)
    HDU 3749 Financial Crisis (点双连通+并查集)
    POJ 1523 SPF (无向图割点)
    HDU 3639 Hawk-and-Chicken (强连通缩点+DFS)
    UVA11324 The Largest Clique (强连通缩点+DP最长路)
    HDU 3861 The King’s Problem (强连通缩点+DAG最小路径覆盖)
    ZOJ 3795 Grouping (强连通缩点+DP最长路)
    POJ 2455 Secret Milking Machine 【二分】+【最大流】
    POJ 2112 Optimal Milking (二分+最短路+最大流)
    POJ 1094 Sorting It All Out 【拓扑排序】
  • 原文地址:https://www.cnblogs.com/df888/p/14008394.html
Copyright © 2011-2022 走看看