最近在研究一个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就会一直匹配查找直到结束。
  1. 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
  2. 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'; 保持

smix到底是个啥?Perl的正则表达式匹配模式的更多相关文章

  1. PHP 正则表达式---匹配模式

    1.PHP 正则表达式 正则表达式贪婪匹配,非贪婪匹配. 默认是贪婪匹配, 例如 ①.贪婪匹配, $str = ' 香肠 月饼 '; preg_match('/ (.)</td>/',$s ...

  2. Java 正则表达式匹配模式[贪婪型、勉强型、占有型]

    Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也许 ...

  3. 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)

    source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...

  4. Perl入门(四)Perl的正则表达式

    正则表达式是Perl语言的特色,基本的语法不是很难,但是编写一个符合需求.高效的正则表达式,还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正则表达式内容/; 作用:查找匹配内容中是否 ...

  5. Flex的正则表达式匹配速度与手工代码的比较

    flex是一个词法分析器生成器,它是编译器和解释器编程人员的常用工具之一.flex的程序主要由一系列带有指令(称为动作代码)的正则表达式组成.在匹配输入时,flex会将所有的正则表达式翻译成确定性有穷 ...

  6. Java/Js下使用正则表达式匹配嵌套Html标签

    转自:http://www.jb51.net/article/24422.htm 以前写过一篇文章讲解如何使用正则表达式完美解决Html嵌套标签的匹配问题(使用正则表达式匹配嵌套Html标签),但是里 ...

  7. PHP 正则表达式匹配 preg_match 与 preg_match_all 函数

    --http://www.5idev.com/p-php_preg_match.shtml 正则表达式在 PHP 中的应用 在 PHP 应用中,正则表达式主要用于: 正则匹配:根据正则表达式匹配相应的 ...

  8. [No0000100]正则表达式匹配解析过程分析(正则表达式匹配原理)&regexbuddy使用&正则优化

    常见正则表达式引擎引擎决定了正则表达式匹配方法及内部搜索过程,了解它至关重要的.目前主要流行引擎有:DFA,NFA两种引擎. 引擎 区别点 DFA Deterministic finite autom ...

  9. Leetcode(10)-正则表达式匹配

    给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s) ,而不 ...

随机推荐

  1. 处理json的工具类({本类为处理json的工具类})

    <jackson.version>2.2.3</jackson.version> <!-- json --> <dependency> <grou ...

  2. 序列化工具类({对实体Bean进行序列化操作.},{将字节数组反序列化为实体Bean.})

    package com.dsj.gdbd.utils.serialize; import java.io.ByteArrayInputStream; import java.io.ByteArrayO ...

  3. Java8中聚合操作collect、reduce方法详解

    Stream的基本概念 Stream和集合的区别: Stream不会自己存储元素.元素储存在底层集合或者根据需要产生.Stream操作符不会改变源对象.相反,它会返回一个持有结果的新的Stream.3 ...

  4. 第二章 python基础(一)

    第一节 Python文件类型 源代码 Python源代码的文件以“py”为扩展名,由Python程序解释,不需要编译 字节代码 Python源文件经编译后生成的扩展名为“pyc”的文件 编译方法 im ...

  5. FileInputStream 把文件作为字节流进行读操作

    //把文件作为字节流进行读操作 FileInputStream in = new FileInputStream(filename);//FileInputStream具体实现了在文件上读取数据

  6. Netty5.x中新增和值得注意的点(转载http://www.coderli.com/netty-5-new-and-noteworthy/)

    该文档会列出在Netty新版本中值得注意变化和新特性列表.帮助你的应用更好的适应新的版本.   不像Netty3.x和4.x之间的变化,5.x没有那么大的变化,不过也取得了其简化设计中的一些突破性进展 ...

  7. codeforces 707A A. Brain's Photos(水题)

    题目链接: A. Brain's Photos 题意: 问是黑白还是彩色; 思路: 没有思路: AC代码: #include <iostream> #include <cstdio& ...

  8. Python 爬虫 —— 文件及文件夹操作

    0. 文件名.路径信息.拓展名等 #取文件后缀 >>> os.path.splitext("/root/a.py") ('/root/a', '.py') #取目 ...

  9. 【leetcode刷题笔记】Valid Palindrome

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...

  10. windows cmd 看服务cpu、内存

    开始菜单-运行-cmd-输入systeminfo-回车 不用命令从以下两个地方都可以看出CPU个数 使用命令看CPU 利用win+r键打开运行,输入cmd回车即会出现 查看cpu信息 通过上图可以看出 ...