smix到底是个啥?Perl的正则表达式匹配模式
最近在研究一个
perl项目,临时学习了一下perl语法,强行看项目源码。因为总是见到各种正则表达式后面接smxi之类,虽然知道是匹配模式,但脑子里毫无概念。所以特地去学习了一下。
以上为背景。
Perl 正则表达式的匹配模式
先举个栗子:
$var =~ s/regexp/place/smx
Perl正则表达式的匹配模式跟它的操作符有关。操作符主要就是m//,s///,tr///三种。
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就会一直匹配查找直到结束。
s///查找替换ismxg全局查`找替换。通俗的说就是不加g只会查找替换一次,加了g就会一直查找替换直到结束。e表示第二个字符串是个可执行的(executable)表达式。废话少说上代码$replace = 'ABC';
$search = 'abcdef'; #$search =~ s/def/$replace.'DEF'/;
# abcABC.'DEF'
$search =~ s/def/$replace.'DEF'/e;
# abcABCDEF
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的正则表达式匹配模式的更多相关文章
- PHP 正则表达式---匹配模式
1.PHP 正则表达式 正则表达式贪婪匹配,非贪婪匹配. 默认是贪婪匹配, 例如 ①.贪婪匹配, $str = ' 香肠 月饼 '; preg_match('/ (.)</td>/',$s ...
- Java 正则表达式匹配模式[贪婪型、勉强型、占有型]
Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也许 ...
- 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)
source: https://swtch.com/~rsc/regexp/regexp1.html translated by trav, travmymail@gmail.com 引言 下图是两种 ...
- Perl入门(四)Perl的正则表达式
正则表达式是Perl语言的特色,基本的语法不是很难,但是编写一个符合需求.高效的正则表达式,还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正则表达式内容/; 作用:查找匹配内容中是否 ...
- Flex的正则表达式匹配速度与手工代码的比较
flex是一个词法分析器生成器,它是编译器和解释器编程人员的常用工具之一.flex的程序主要由一系列带有指令(称为动作代码)的正则表达式组成.在匹配输入时,flex会将所有的正则表达式翻译成确定性有穷 ...
- Java/Js下使用正则表达式匹配嵌套Html标签
转自:http://www.jb51.net/article/24422.htm 以前写过一篇文章讲解如何使用正则表达式完美解决Html嵌套标签的匹配问题(使用正则表达式匹配嵌套Html标签),但是里 ...
- PHP 正则表达式匹配 preg_match 与 preg_match_all 函数
--http://www.5idev.com/p-php_preg_match.shtml 正则表达式在 PHP 中的应用 在 PHP 应用中,正则表达式主要用于: 正则匹配:根据正则表达式匹配相应的 ...
- [No0000100]正则表达式匹配解析过程分析(正则表达式匹配原理)&regexbuddy使用&正则优化
常见正则表达式引擎引擎决定了正则表达式匹配方法及内部搜索过程,了解它至关重要的.目前主要流行引擎有:DFA,NFA两种引擎. 引擎 区别点 DFA Deterministic finite autom ...
- Leetcode(10)-正则表达式匹配
给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s) ,而不 ...
随机推荐
- PLSQL Developer使用技巧整理
Shortcut: =============================================================================== Edit/Und ...
- C++(五)— 控制保留小数位数
1.C++中输出指定保留的小数位数. 这里还要注意,每次输出只要设置一次就行了,因为这两个的作用范围是后续对象,而不是仅对后一个对象起作用. #include<iostream> #inc ...
- C#winform拖拽实现获得文件路径
1.关键知识点说明: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等),在DragDrop事件中对“信息”进行解析.窗体的AllowDrop属性必须设置成true;且 ...
- Git_错误_03_ Git提交时显示用户 unknown
这是因为没有设置用户名 $ git config --global user.name "your_name" $ git config --global user.email & ...
- myeclipes如何调试web项目
你可以右击项目,然后选中那个debug as,然后选择open debug dialog,在project中选择要运行的项目,sever中选择服务器,然后单击debug就ok了,,
- ADO:游标与RecordSetPtr
一.游标的属性设置: 游标是记录集recordset中用于游动逐个查找一条记录的一种机制.查询的数据返回后,通过游标来逐条获取查询的记录. 因此在配置数据库查询方式前可配置游标的属性: rs.Curs ...
- linux命令学习笔记(14):head 命令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显 示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. .命令格式: hea ...
- 【leetcode刷题笔记】Search a 2D Matrix
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- bzoj3573米特运输
题意: 给定一棵树上的边和点权 改动点权使得每个父节点u容量为子节点容量的d[u](子节点个数)倍 考察点: 1.这是一道语文题 2.点权很大 直接算会爆 有一种优化办法:取log(醉 这是什么优化) ...
- redisCheckMem脚本
最近维护的redis cluster需要扫描每个实例的内存使用率,首先我们需要获取实例已经使用的内存,获取实例的最大内存配额,两个值相比就能获取到内存使用比例. 实例的最大内存获取方法: $REDIS ...