当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Linux 正则表达式详解

    栏目:Linux/apache问题 时间:2019-11-17 14:21

    一.linux文本查找命令

    在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令:

    1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。

    2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。

    3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。

    如下简单的介绍grep命令:

    语法格式:

    grep [options ...] pattern-spec [files ...]

    用途:

    匹配一个或多个模式的文本行。

    options:

    -E : 使用扩展正则表达式进行匹配, grep -E 或取代 egrep 命令。

    -F : 使用固定字符串进行匹配, grep -F 或取代传统的fgrep命令。

    -e : 通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。

      模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。

    -f : 从pat-file文件读取模式作为匹配。

    -i : 模式匹配时忽略大小写差异。

    -l : 列出匹配模式的文件名称,而不是打印匹配的行。

    -q : 静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。

    -s : 不显示错误信息,通常与-q并用。

    -v : 显示不匹配模式的行。

    说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。

    可以使用多个-e 或 -f 选项,建立要查找的模式列表。

    二.正则表达式简要介绍

    1.正则表达式的组成

    (1).一般字符:没有特殊意义的字符

    (2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义

    2.如下讲下正则表达式中的常见meta字符

    (1).POSIX BRE与ERE中都有的meta字符:

    \   :  通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}

    .   :   匹配任何单个字符(除NUL)

    *  :   匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度

    ^  :   匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义

    $  :   匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义

    []  :   匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,

    (2).POSIX BRE中才有的字符:

    \{n,m\} : 区间表达式,匹配在它前面的单个字符重现的次数区别。\{n\}指重现n次;\{n,m\}指重现n至m次;

    \( \) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如\(ab\).*\1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。

    \n : 重复在\(与\)方括号内第n个子模式至此点的模式。

    (3).POSIX ERE中才有的字符:

    {n,m} : 与BRE的\{n,m\}功能相同

    + : 匹配前面正则表达式的一个或多个扩展

    ? : 匹配前面正则表达式的零个或一个扩展

    | : 匹配|符号前或后的正则表达式

    ( ) : 匹配方括号括起来的正则表达式群

    (4). 方括号([])表达式

    4.1.字符集  [:  :]

    标识字符集,有如下几种: