美文网首页
如何练好正则表达式这个基本功

如何练好正则表达式这个基本功

作者: 张春天 | 来源:发表于2020-05-21 23:00 被阅读0次

     正则表达式(RegularExpression)就是使用简单的字符按照预先设定的规则来完成复杂的功能,说白了,正则表达式是一种字符串的匹配方式,就是用预先设定好的规则来描述我们想要表达的内容,它是由普通字符以及元字符组成的字符串,其中元字符不表示本身的意义,而是用于表达控制或通配等功能。

    为什么要用这个东西那,我想,每一个学习计算机的人都应该明白,计算机就是我们用数字来描述这个现实的世界,而如何使用数字来描述这个现实世界那,就必须用到字符,正则表达式之所以无比重要就是因为可以通过它来找到我们想要的东西,我们知道,对于linux系统管理来说,最重要的工作就是通过修改配置文件来实现系统管理工作的,而面对浩瀚的配置文件,如何能找到我们想要修改的内容那,有了正则表达式,就会大大减轻我们的工作量,下面就让我介绍一下linux文本搜索工具。

    Linux下的文本搜索工具主要就三个:grep、egrep、fgrep;这三个工具主要功能就是根据用户指定的文本模式,这个文本模式是由正则表达式元字符以及正常字符组合而成,对目标文件进行逐行搜索,然后显示能匹配到的行。

    grep命令使用方法:

        grep  [OPTION] PATTERN   [FILE ….]

    重要选项介绍:

        --color:用来指定匹配内容的颜色,主要参数有:auto; always;never;

    例如:grep  --color=auto  “root” /etc/passwd

    [if !vml]

    [endif]

          -v :反向显示

          -o :只显示能匹配到的内容而不显示能匹配到这一行的其他内容

          -i :搜索时不区分大小写

          -E:使用扩展的正则表达式

          -A#:被模式匹配到的行的下#行也一起显示

    -B#:被模式匹配到的行的前#行也一起显示

    -C#:被模式匹配到的行的前后#行也一起显示

    以上就是grep命令的常用常见,接下来我们详细介绍grep搜索的模式,也就是正则表达式

    [if !supportLists]1、  [endif]字符匹配

    .  :匹配任意的单个字符

    [ ] :匹配指定范围内的任意单个字符

       [[:digit:]]或[0-9]:表示0-9范围内任意单个数字

       [[:lower:]]或[a-z]表示a-z范围内任意单个字母

       [[:upper:]]或[A-Z]:表示A-Z范围内任意单个字母

       [[:alnum:]]或[0-9a-zA-Z]:表示任意大小写字母或数字

       [[:alpha:]]或[a-zA-Z]:表示任意大小写字母

    [[:space:]]表示任意空格

    [^] :表示匹配制定范围外的任意单个字符

    [if !supportLists]2、  [endif]次数匹配:在期望匹配字符的后面提供一个控制符,用来表达匹配其前面字符指定的次数。

    *   :表示任意长度,0次、1次、或多次

    \?   :匹配其前面的字符可以1次或0次,也就是说前面字符可有可无

    \+   :1次或多次,表示左侧字符至少出现一次

    \{n\}   :n次表示其左侧字符精确出现n次

    \{m,n\}  :至少m次,至多n次

    \{0,n\}   :至多n次

    \{m,0\}   :至多m次

    [if !supportLists]3、  [endif]位置锚定

    ^  :用来锚定行首

    $  :用来锚定行尾

    [if !supportLists]4、  [endif]单词锚定:有非特殊字符组成的连续字符串

    \<或\b  :锚定词首

    \>或\b  :锚定词尾

    \   :匹配PATTERN能匹配到的整个单词

    [if !supportLists]5、  [endif]分组:在分组中的模式在某次具体的匹配过程中所匹配的字符,可以被grep记忆,保存于内置的变量中,这些变量是(\1、\2、…..\9)因此还可以被用来引用,其中(\1)用来引用自左而右由第一个左括号以及与之对应的右括号中模式所匹配到的内容,其中(\2)用来引用自左而右由第二个左括号以及与之对应的右括号中模式所匹配到的内容;

    例如创建一下文本文件

    [if !vml]

    [endif]

    使用使用\1引用前一个模式总所匹配到的内容

    [if !vml]

    [endif]

    接下来我们详细介绍egrep搜索的模式,也就是扩展正则表达式

    egrep命令使用方法:

        egrep  [OPTION] PATTERN   [FILE ….]

    1字符匹配

    .  :匹配任意的单个字符

    [ ] :匹配指定范围内的任意单个字符

       [[:digit:]]或[0-9]:表示0-9范围内任意单个数字

       [[:lower:]]或[a-z]:表示a-z范围内任意单个字母

       [[:upper:]]或[A-Z]:表示A-Z范围内任意单个字母

       [[:alnum:]]或[0-9a-zA-Z]:表示任意大小写字母或数字

       [[:alpha:]]或[a-zA-Z]:表示任意大小写字母

    [[:space:]]表示任意空格

    [^] :表示匹配制定范围外的任意单个字符

    [if !supportLists]2、  [endif]次数匹配:在期望匹配字符的后面提供一个控制符,用来表达匹配其前面字符指定的次数。

    *   :表示任意长度,0次、1次、或多次

    ?   :匹配其前面的字符可以1次或0次,也就是说前面字符可有可无

    +   :1次或多次,表示左侧字符至少出现一次

    {n}   :n次表示其左侧字符精确出现n次

    {m,n}  :至少m次,至多n次

    {0,n}   :至多n次

    {m,0}   :至多m次

    [if !supportLists]3、  [endif]位置锚定

    ^  :用来锚定行首

    $  :用来锚定行尾

    [if !supportLists]4、  [endif]单词锚定:有非特殊字符组成的连续字符串

    \<或\b  :锚定词首

    \>或\b  :锚定词尾

    \   :匹配PATTERN能匹配到的整个单词

    [if !supportLists]5、  [endif]分组:在分组中的模式在某次具体的匹配过程中所匹配的字符,可以被grep记忆,保存于内置的变量中,这些变量是(\1、\2、…..\9)因此还可以被用来引用,其中(\1)用来引用自左而右由第一个左括号以及与之对应的右括号中模式所匹配到的内容,其中(\2)用来引用自左而右由第二个左括号以及与之对应的右括号中模式所匹配到的内容;

    fgrep表示匹配的模版都被看做是字符串,因此元字符都作为普通字符来处理,使用方法类似,因此不做详细描述。

    正则表达式现在广泛应用于Unix系统、Linux系统以及PHP、C#、Java等开发环境中,灵活的运用正则表达式可以极大的简化日常工作,就好比每一个成为武林高手所必备的基本功,每一招每一式都需要勤加练习,这样才能做到运用自如。

    相关文章

      网友评论

          本文标题:如何练好正则表达式这个基本功

          本文链接:https://www.haomeiwen.com/subject/hgixahtx.html