正则表达式入门

正则表达式入门

谈到正则表达式,我们就得先了解一下POSIX。POSIX的全称是Portable Operating System Interface for
uniX
,它由一系列规范构成,定义了UNIX,linux操作系统应当支持的功能,它定义了BREBasic Regular Expression,基本型正则表达式)和EREExtended Regular Express,扩展型正则表达式)两大流派。

正则表达式由只代表自身的字面值和代表特定含义的元字符组成,除非特别说明,正则表达式严格区分大小写。正则表达式的大致匹配过程是:

1.依次拿出表达式和文本中的字符比较,

2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。

3.如果表达式中有量词或边界,遵循量词或边界指定的规则来匹配。

正则表达式入门

基础正则表达式中,如果你想使用? + () {},因为他们表示特殊含义,所以你需要将他们转义

而扩展正则表达式中,如果你想使用? + () {} ,就没必要加“\”了,进化版的正则表达式在这方面给我们提供了很大的便利正则表达式入门

所谓特殊含义,就是正则表达式中的含义。非特殊含义,就是这个符号本身。

+,*中大家会遇到贪婪模式的说法,也有称最长匹配原则,本质就是趋向于最大长度匹配。”.*”这个组合几乎可以匹配所有,贪婪性赤裸裸的暴露出来了。

基本正则表达式(BRE

字符匹配

(匹配的时候需要使用两个方括号,如[[ :alpha:]])
    .  表示任意单个字符,.会匹配除了换行符的任意字符
    [ ]   表示匹配范围内的任意单个字符
    [^ ]  表示匹配范围外的任意单个字符
    [:alpha:]   任意一个字母(相当于a-zA-Z)
    [:upper:]  任意一个大写字母(相当于A-Z)
    [:lower:]  任意一个小写字母(相当于a-z)
    [:digit:]   任意一个数字(相当于0-9)
    [:space:]  水平和垂直的空白字符(比blank包含的更多)
    [:blank:]   空白字符(空格和制表符)
    [:punct:]  标点符号
    [:alnum:]   任意字母和数字(相当于0-9a-zA-Z)
    [:print:]   可打印字符

匹配次数

    *   表示*号前面的一个字符的0-N次(它有一个贪婪模式,会尽量匹配最长)
    .*   表示任意多个长度的字符
    \?    表示\?符号前的字符0-1次
    \+     匹配\+前的字符至少1次
    \{m,n\}    表示\{m,n\}符号前的字符的m-n次
    \{m\}     表示{m\}符号前的字符m次
    \{n,\}     表示匹配前面字符至少n次
    \{,n}      表示匹配前面字符最多n次

位置锚定

    ^ 之后接字符    表示^ 之后的字符出现在行首
    $ 之前接字符    表示$之前的字符出现在行尾
    \> 表示\> 符号之后的字符出现在单词的尾部
    \< 表示\< 之前的字符出现在单词的首部
    \<字符 \>      表示只有小于号和大于号之间的字符

分组

    分组 : \(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,如 : \(root\)+
    后向引用 : 引用前面的分组括号中的模式所匹配字符,而非模式本身
 
    或者 : \|

拓展正则表达式(ERE

字符匹配

    .  表示任意单个字符,.会匹配除了换行符的任意字符
    []   匹配指定范围内的任意单个字符
    [^]  匹配指定范围外的任意单个字符
    [ :alnum : ]   字母和数字
    [ :alpha : ]   代表任何英文大小写字符,亦即 A-Z, a-z
    [ :lower : ]   小写字母
    [ :upper : ]   大写字母
    [ :blank : ]   空白字符(空格和制表符)
    [ :digit : ]   十进制数字
    [ :xdigit : ]  十六进制数字
    [ : graph :]   可打印的非空白字符
    [ :print :]   可打印字符
    [ :punct :]   标点符号

 

匹配次数

    * 匹配前面字符任意次,包括0次
    ? 0或1次
    +: 1次或多次
    {n}   匹配前面的字符n次
    {m,n} 匹配前面的字符至少m次,至多n次
    {,n}  匹配前面的字符至多n次
    {n,}  匹配前面的字符至少n次

位置锚定

    ^   行首锚定,用于模式的最左侧
 
    $   行尾锚定,用于模式的最右侧
 
    \< 或 \b     词首锚定,用于单词模式的左侧
 
    \> 或 \b     词尾锚定;用于单词模式的右侧
 
    \<PATTERN\> 匹配整个单词

分组

    ():分组,后面可以使用1 ,2 ,3...引用前面的分组
    a|b : a或b

优先级

优先级

符号

1

\

2

( )(?: )(?= )[ ]

3

*+?{n}{n,}{m,n}

4

^$

5

|

实战正则表达式入门

(思考的出发点不同,过程也就不尽相同,过程和结果同样重要

1找出/etc/rc.d/init.d/functions的基名(basename可以直接获取)。

正则表达式入门

2 找出/etc/rc.d/init.d/functions的目录名(dirname可以直接获取)。

正则表达式入门

3 统计last命令中以root用户登录的每个主机IP登录次数。

正则表达式入门

4 显示ifconfig命令中所有的IPV4地址。

正则表达式入门

5显示/etc/passwd中以/bin/bash结尾的行。

正则表达式入门

        基于最近的学习整理的资料,尚有诸多不足之处,还望大佬们多多指点!

原创文章,作者:LinuxWalker,如若转载,请注明出处:http://www.178linux.com/83036

(0)
LinuxWalkerLinuxWalker
上一篇 2017-07-29
下一篇 2017-07-29

相关推荐

  • CentOS 6的开机流程及root密码破解

    一、CentOS 6的开机流程详解 启动流程详解 1、POST:    Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测。 2、BootSequence(BIOS):    决定那个磁盘…

    Linux干货 2016-09-13
  • Linux用户和组的相关管理命令(一、用户的相关命令)

    Linux是一个可以实现多用户登录的操作系统,通过su – 用户名 可以进行用户之间的切换,从而完成不同登录用户下对私有文件的操作,同时,每个用户有且只有一个主组,但是可以有零个或多个附加组,每个组可以是一个用户的主组,同时还可以是多个用户的附加组。因此,熟练掌握用户和组的相关命令十分重要。 首先,要了解用户和组的配置文件各有两个: 与用户相关的…

    2017-07-22
  • 第一周作业

    1. 描述计算机组成及其功能 说到计算机组成,就必须提及计算机之父冯洛伊曼先生。是他早年最先提出了计算机体系结构的设想,并沿用至今。 计算机由五大基本组件组成: 运算器 进行算术运算和逻辑运算的主要部件; 控制器 控制器从存储器中逐条取出指令、分析指令,然后根据指令要求产生一系列命令,控制计算机各部件; 存储器 分为内存和外存,…

    Linux干货 2016-12-02
  • gzip压缩算法

    gzip,zlib,以及图形格式png,使用的是同一个压缩算法deflate。我们通过对gzip源码的分析来对deflate压缩算法做一个详细的说明: 第一,gzip压缩算法基本原理的说明。 第二,gzip压缩算法实现方法的说明。 第三,gzip实现源码级的说明。 1. Gzip压缩算法的原理      &n…

    Linux干货 2015-07-30
  • sed命令及vim编辑器

    sed[option]… 'script' inputfile…选项:-n:不输出模式空间内容的自动打印-e: 多点编辑-f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本-r: 支持使用扩展正则表达式-i: 原处编辑script:'地址命令' 1.地址定界:(1) 不给地…

    Linux干货 2016-08-11
  • 第一周作业

    描述计算机的组成及其功能。 由冯~诺伊曼提出计算机体系结构,计算机主要由控制器、运算器、存储器、输入设备、输出设备五大硬件组成。 控制器(Controller):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 运算器(Datapath):运算器的功能是对数据进…

    Linux干货 2017-02-07