博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
smix到底是个啥?Perl的正则表达式匹配模式
阅读量:4947 次
发布时间:2019-06-11

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

最近在研究一个perl项目,临时学习了一下perl语法,强行看项目源码。因为总是见到各种正则表达式后面接smxi之类,虽然知道是匹配模式,但脑子里毫无概念。所以特地去学习了一下。

以上为背景。

Perl 正则表达式的匹配模式

先举个栗子:

$var =~ s/regexp/place/smx
Perl正则表达式的匹配模式跟它的操作符有关。操作符主要就是m//,s///,tr///三种。

  1. m// 查找匹配,m可以省略
    • i 忽略大小写,无需解释
    • s 在这个模式下 . 可以匹配换行符\n。也就是说如果你匹配的文本超过多行,而你有没有s修饰符,那匹配到换行的时候就结束了。另外一个使用它的主要原因是

      /s 修饰词同样还令 Perl 忽略我们已经不鼓励使用的 $* 变量,我们也希望你也忽略。

    • m 令 ^ 和 $ 匹配下一个嵌入的 \n。我们举例子来说,有一个字符串Hello\nworld, m/^wor|llo$/匹配失败,而m/^wor|llo$/m能匹配成功.
    • x 忽略(大多数)空白并且允许模式中的注释。这个是最好玩的,你可以在正则里换行加空格加注释,尽情修饰。但是千万注意不要混入了你所使用的定界符

      m{      \w+:        # 匹配一个词和一个{冒号}。  }x;  #注意注释文字里的大括号。这个会报错
    • g 全局查找。通俗的说就是不加g匹配成功一次就会结束,加了g就会一直匹配查找直到结束。

  2. s/// 查找替换
    • i
    • s
    • m
    • x
    • g 全局查`找替换。通俗的说就是不加g只会查找替换一次,加了g就会一直查找替换直到结束。
    • e 表示第二个字符串是个可执行的(executable)表达式。废话少说上代码

      $replace = 'ABC';  $search = 'abcdef';  #$search =~ s/def/$replace.'DEF'/;      # abcABC.'DEF'  $search =~ s/def/$replace.'DEF'/e;      # abcABCDEF
  3. tr/// 转换。看起来跟上面2个差不多,实际上用法完全不一样.. 好吧,我也不是很明白,暂时没用上,点到为止。
    • c 与SEARCHLIST为补。
    • d 删除找到的但是没有替换的字符
    • s 消除重复的字符。

========

一些perl正则的经典用法

$string = "password=xyzzy verbose=9 score=0";%hash = $string =~ /(\w+)=(\w+)/g;#%hash = (password => "xyzzy", verbose => 9, socre => 0);$hobbit = 'Bilbo';($lotr = $hobbit ) =~ s/Bilbo/Frodo/g;# $lotr => 'Frodo';    替换# $hobbit => 'Bilbo';    保持

转载于:https://www.cnblogs.com/dapianzi/p/7064137.html

你可能感兴趣的文章
恶意PDF文档分析记录
查看>>
查看运行时某个java对象占用JVM大小及通过idea查看java的内存占用情况
查看>>
typedef 和define的区别
查看>>
01背包问题ECNU2585
查看>>
HDU4602+推导公式
查看>>
Jquery复习(三)之链式调用
查看>>
应用 XAF 开发移动手机应用
查看>>
Sprint第三个冲刺(第五天)
查看>>
spark(02)
查看>>
ContentProvider深度探索
查看>>
asp.net core Csc任务不支持SharedCompilationId参数,请确认改参数存在于此任务中,并且是可设置的公共实例属性...
查看>>
[iis6]iis备份
查看>>
JAVA字符串简单处理--substring,replace,split
查看>>
Objective Runtime总结
查看>>
AngularJS 整理资料
查看>>
oracle 中(+)是什么意思
查看>>
2019-7-15 vue01day
查看>>
2019.04.08 电商17 购物车模型
查看>>
asp.net mvc Ajax.BeginForm不能异步刷新,或转到新页面,或页面还是刷新了,的原因(或解决办法)(转)...
查看>>
JAVA中的接口和抽象类(转)
查看>>