美文网首页
05.Perl -- 正则表达式

05.Perl -- 正则表达式

作者: QXPLUS | 来源:发表于2022-05-20 10:58 被阅读0次
    • 正则表达式, 就是用某种模式去匹配一类字符串的一个公式

    语法

    • 简单模式
      如果模式匹配的对象是$_, 把模式卸载斜线之间(/partten/)

    • 例如, 如果$_中存在World ,则打印 It matched

    $_ = "Hello World, I'm the regression";
    if (/"World"/){printf "It matched"};
    

    如果匹配项本身含有斜向,则使用反斜线进行转义

    $_ = "the file is in C:/Perl/Target";
    if (/"C:\/Perl\/Target"/){printf "the target fold is searched"};
    

    Unicode属性

    • 利用字符的属性来匹配

    \p{属性名} 表示包含该属性的模式

    1. 匹配空格、换行符,使用Space属性
    • \p{Space}
    $_ = "Hello World, I'm the regression";
    if (/\p{Space}/){printf "The string has some whitespace\n"};
    
    1. 匹配数字,使用Digit属性
    • \p{Digit}
    $_ = "Hello World, I'm the regression 1";
    if (/\p{Digit}/){printf "The string has digit\n"};
    
    1. 匹配十六进制数字,使用Hex属性
    • \p{Hex}

    \P{属性名} 表示不包含该属性的部分

    模式分组

    • 括号、反斜线、数字可以组成捕获组的模式
    • 括号内的内容作为元字符,用反斜线+数字,表示再次匹配N次

    /(World)\3/: 表示匹配 WorldWorldWorldWorld

    /(Hello)(World)\1\2/: 表示匹配 HelloWorldHelloWorldWorld
    先对原字符串匹配一次,再进行:\1表示对Hello再匹配1次,\2表示对World再匹配2次

    • 择一匹配
      使用|表示匹配时候的或
      /Hello|World/: 表示,任何包含Hello 或者 包含World的字符串。

    /Hello (|my) World/: 表示,任何包含Hello my World 或者 包含Hello World的字符串。

    正则表达式中的元字符

    • 元字符是一种特殊字符
    • 起通配作用

    元字符列表

    • 字符类:单字符或数字
      .: 匹配除换行符外的任意字符
      [a-z0-9]: 匹配 集合中人以单个字符
      [^a-z0-9]: 匹配不在集合中简单任意单个字符
      \d: 匹配单个数字
      \D: 匹配非数字字符, 等价于 [^0-9]
      \w:匹配数字型(字)字符
      \W:匹配非数字型(非字)字符

    • 字符类:空白字符
      \s: 匹配空白字符,如 空格、制表符、换行符
      \S: 匹配非空白字符
      \n: 匹配换行符
      \r: 匹配回车符
      \t: 匹配制表符
      \f:匹配进纸符
      \b: 在[]中时,匹配退格符 backspace
      \0: (\数字0)匹配空值字符

    • 字符类:锚定字符
      \b: 不在[]中时,匹配字边界
      \B: 匹配非字边界
      ^: 匹配行首
      $: 匹配行尾
      \A:匹配字符串开头
      \Z: 匹配字符串或行的末尾
      \z:只匹配字符串末尾
      \G:匹配前一次m//g

    • 字符类:重复字符
      x?: 匹配0个或1个x
      x*: 匹配0个或多个x
      x+: 匹配1个或多个x
      (xyz)+: 匹配1个或多个xyz
      x(m,n): 匹配m个到n个x组成的值

    • 字符类:替换字符
      (was|were|will): 匹配was、were、will三者之一。

    • 字符类:其他字符
      \12: 匹配八进制数
      \x811: 匹配十六进制数
      \cX:匹配控制字符, 如 \cC (Ctrl + C)
      \e: 匹配ASCII
      \x{NUMBER}: 匹配以十六进制形式给出的Unicode

    模式匹配

    • 得到“是否匹配”的结果, 返回值为1或0.
    • 形式为:
      m/<regexp>/
      m 是 match 的缩写
      或者写为:
      /<regexp>/
      m?<regexp>?

    一个例子

    $test = "China"
    $target = ".*ina"
    $test =~m/$target/
    # 1
    

    相关文章

      网友评论

          本文标题:05.Perl -- 正则表达式

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