博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Perl正则表达式初步
阅读量:4222 次
发布时间:2019-05-26

本文共 2594 字,大约阅读时间需要 8 分钟。

Perl的正则表达式功能十分强大,基本上是常用语言中最强大的,很多语言如Java设计正则式支持的时候都参考Perl正则表达式。本文介绍Perl正则表达式中最基本、最常用的部分。
一、正则表达式运算符
=~ 正则表达式匹配运算符,左边是待匹配字符串,右边是正则表达式,匹配结果设置在$1,$2等变量中,在scaler上下文中,成功匹配返回匹配个数,否则返回false。例如 $var =~ /foo/;
!~ 正则表达式匹配运算符,和=~ 不同的是它忽略匹配结果,且返回值相反。例如 $var !~ /foo/;
正则表达式运算符右边是正则表达式,有如下三种形式:
1. 匹配模式 m/pattern/igmsoxc
      m表示match,pattern是正则式内容,分隔符/可以用任意其他字符如#替换,igmsoxc是可选的参数,意义如下:
        i 忽略大小写
        g 匹配所有符合的(默认是匹配第一个符合的)
        m 多行模式,^和$分别匹配行的开始和结尾(默认匹配字符串的开始和结尾)
        s 单行模式,“.” 匹配“/n”(默认不匹配)
        o compile pattern Once
        x eXtended legibility - free whitespace and comments
        c don't reset pos on failed matches when using /g
2. 存储模式 qr/pattern/imsox
      qr将正则表达式存储到一个变量中,这样可以反复使用,可选项意义与m相同
3. 替换模式 s/pattern/replacement/igmsoxe
      s代表substitutes,将匹配的模式pattern替换为replacement,多了一个可选项:
        e 将replacement作为一个表达式执行
4. 一次性匹配模式 ?pattern?
和m/pattern/相同,但是只进行一次匹配,?不能用其他分隔符替换
二、基本语法元素
   /       字符转义
   .       匹配除/n外的任意字符
   ^       匹配行或字符串开头
   $       匹配行或字符串结尾
   *       0个或多个
   +       1个或多个
   ?       0个或1个
   {...}   指定个数
   [...]   字符类,匹配括号中的任意一字符
   (...)   匹配组,匹配后可以用$1,$2等获取相应的匹配组
   (?:...) 聚集,匹配后不能$1,$2等获取相应的匹配组,速度会快些
   |       前者或后者,一般和括弧配合使用
   /1, /2 ... 正则式中反引用匹配组
三、常见转义字符
   /a       Alarm (beep)
   /e       Escape
   /f       Formfeed
   /n       Newline
   /r       Carriage return
   /t       Tab
   /037     Any octal ASCII value
   /x7f     Any hexadecimal ASCII value
   /x{263a} A wide hexadecimal value
   /cx      Control-x
   /N{name} A named character
   /l Lowercase next character
   /u Titlecase next character
   /L Lowercase until /E
   /U Uppercase until /E
   /Q Disable pattern metacharacters until /E
   /E End case modification
   /b word boudariy
四、字符类
   [...]匹配括号中的任意一个字符,但是当第一个字符是^时是相反的,匹配除了括号中的字符外的任意字符。另外还有a-z这样的简写方式代替a到z的所有字符。例如:
   [amy]    Match 'a', 'm' or 'y'
   [f-j]    Dash specifies "range"
   [f-j-]   Dash escaped or at start or end means 'dash'
   [^f-j]   Caret indicates "match any character _except_ these"
   一些字符类有更简单的表达方式,如:
   /d      A digit                     [0-9]
   /D     A nondigit                  [^0-9]
   /w      A word character            [a-zA-Z0-9_]
   /W     A non-word character        [^a-zA-Z0-9_]
   /s      A whitespace character      [ /t/n/r/f]
   /S      A non-whitespace character [^ /t/n/r/f]
五、特殊标记
   ^ Match string start (or line, if /m is used)
   $ Match string end (or line, if /m is used) or before newline
   /b Match word boundary (between /w and /W)
   /B Match except at word boundary (between /w and /w or /W and /W)
   /A Match string start (regardless of /m)
   /Z Match string end (before optional newline)
   /z Match absolute string end
   /G Match where previous m//g left off
六、重复
   Maximal Minimal Allowed range
   ------- ------- -------------
   {n,m}   {n,m}? Must occur at least n times but no more than m times
   {n,}    {n,}?   Must occur at least n times
   {n}     {n}?    Must occur exactly n times
   *       *?      0 or more times (same as {0,})
   +       +?      1 or more times (same as {1,})
   ?       ??      0 or 1 time (same as {0,1})

转载地址:http://zsqmi.baihongyu.com/

你可能感兴趣的文章
Multisim 14.0 搭建并仿真51单片机最小系统
查看>>
51 中断系统 外部中断0 外部中断1
查看>>
51 单片机 时间/计数器中断
查看>>
腾讯云本地还原mysql物理冷备
查看>>
算法图解 第1章 算法简介
查看>>
算法图解 第3章 递归
查看>>
Java反转整数
查看>>
解释 Zuul 的 zuul.strip-prefix 属性
查看>>
翻译 AbstractQueuedSynchronizer ( AQS )类注释
查看>>
HighCharts线型设定
查看>>
把win7 资源管理器的导航树改成xp的样式
查看>>
highcharts 内存泄露的解决
查看>>
blockUI 模态窗口
查看>>
网络通讯堵塞情况下的定时刷新
查看>>
手动将Apache注册为系统服务
查看>>
jdbc中Datetime与java.util.Date的相互转换
查看>>
hibernate中取得connection的方法
查看>>
如何使用log4j输出单个级别的log到指定文件
查看>>
表单元素与提示文字无法对齐的解决方法
查看>>
图片按钮消除边框
查看>>