zoukankan      html  css  js  c++  java
  • 正则表达式详解

    正则表达式是干什么的:

    正则表达式的作用是从一个字符串中捕获符合要求的字符串。

    先看一个最简单的捕获:

    正则表达式 /123/ 捕获任意字符串中的 123。如:

    a123b

    aaab12bb13123c

    匹配:

    如果一个字符串中存在至少一个捕获,就算这个正则表达式匹配此字符串。如果只存在一个捕获,而且此捕获是整个字符串,则算完全匹配

    符号(“|”)

    正则表达式 /123|a/ 捕获 123或者 12a,如:

    12ac123

    12abcc

    01262312343

    并:

    任何两个正则表达式放在一起就成了并,如 /a/ 是一个合法的正则表达式,它捕获 a字符, /b/ 也是一个合法的正则表达式,它捕获 b字符。/ab/ 这个正则表达式捕获连在一起的 ab这样的字符串。在并的时候,两个正则表达式之间形成了断言。(关于断言会在下面讲到)。

    括号:

    可以用括号可以者强调符号的结合顺序,如正则表达式/(123)|(abc)/捕获123或者abc

    字符类:

    可以用 [abc] 的形式来表示 (a|b|c) ,如:

    正则表达式 /[abc]/ 捕获 ab或者 c

    字符类的特殊构造:

    ^放在 [] 的开头表示不捕获这些字符,如:

    正则表达式 /[^abc]/ 捕获除了 abc以外的任何字符。

    -放在两个字符之间,表示匹配在字符表上这两个字符之间的所有字符。如:

    [a-z] = [abcdefghijklmnopqrstuvwxyz]

    [a-Z] = [a-zA-Z] = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]

    [0-9] = [0123456789]

    特殊的字符类:

    \w = [a-zA-Z_0-9]

    \W = [^\w]

    \s = [ \f\n\r\t\v](注1)

    \S = [^\s]

    \d = [0-9]

    \D = [^\d]

    . = 任何字符(如果没有加SingleLine参数则不匹配\n

    注1:\f\n\r\t\v与C语言转义字符串含义相同。如(\n换行符, \t跳格符)

    重复:

    正则表达式 /a{1,3}/表示/(a)|(aa)|(aaa)/,捕获aaa或者aaa

    另有特殊字符约定如下:

    * = {0,无穷大}

    + = {1,无穷大}

    ? = {0,1}

    重复可以与括号一起用,如:

    正则表达式 /(abc){1,2}/捕获abc或者abcabc

    零重复的作用:

    零重复代表不捕获任何字符。单独使用无意义,但可以组合。如:

    正则表达式/abc?/捕获ab或者abc

    以上所有的不包含无穷大重复的正则表达式都可以转化为只包含,或、并和括号的正则表达式。

    (如数学中的3x5 = 1x5+2x5 ^_^)

    如正则表达式:/([abc]1){2,3}/ = /(((a|b|c)1)((a|b|c)1))|(((a|b|c)1)((a|b|c)1)((a|b|c)1))/

    断言:

    任何两个合法的正则表达式在一起的时候,在它们之间就形成断言。如正则表达式: /ab/ 是由正则表达式 /a/ 和 /b/ 并而组成的,在a和b之间就形成了断言。/ab/ 正则表达式中的 /a/ 只能捕获在字符 b前面的 a,而 /b/ 也只能捕获字符 a后面的 b

    零宽度(非捕获)断言符:

    $断言此处一定是字符串的结尾,如:

    正则表达式/abc$/捕获在字符串结尾处的abc,而忽略字符串中间任何的abc,如:

    123abcc,无捕获,不匹配。

    $断言此处一定是字符串的结尾,如:

    正则表达式 /abc$/捕获在字符串结尾处的abc,而忽略字符串中间任何的 abc,如:

    123abcc,无捕获,不匹配

    abcsabc

    ^断言此处一定是字符串的开头

  • 相关阅读:
    4 weekend110的textinputformat对切片规划的源码分析 + 倒排索引的mr实现 + 多个job在同一个main方法中提交
    3 weekend110的shuffle机制 + mr程序的组件全貌
    2 weekend110的hadoop的自定义排序实现 + mr程序中自定义分组的实现
    1 weekend110的复习 + hadoop中的序列化机制 + 流量求和mr程序开发
    weekend110(Hadoop)的 第四天笔记
    4 weekend110的YARN的通用性意义 + yarn的job提交流程
    3 weekend110的job提交的逻辑及YARN框架的技术机制 + MR程序的几种提交运行模式
    Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor
    Android SDK 和 Eclipse ADT 离线安装 教程
    leetcode——Evaluate Reverse Polish Notation 求算式值(AC)
  • 原文地址:https://www.cnblogs.com/jcomet/p/1242776.html
Copyright © 2011-2022 走看看