版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/09/05/perl-m-g/以及本声明。
今天讨论一下m//g一个的小问题。m//g表示在字符串中查找所有可能出现的模式匹配。在标量环境下,m//g会依次查找每个出现的匹配。通常的用法是这样的:
while (/(pattern)/g) {
print $1; # 做些操作
}在内部,m//g会保存一个“匹配位置”的变量,表示这次的m//g匹配到了什么位置,以便下次运行时从该处继续开始。(这个位置可以通过pos函数获得,这里就不多说了。)通常,用在while循环里是没有任何问题的,但如果换成if会怎样?
$_ = "abc";
print "a" if /a/g;
print "b" if /b/g;
# 输出结果:ab结果是正确的。如果将语句换个位置呢?
$_ = "abc";
print "b" if /b/g;
print "a" if /a/g;
# 输出结果:b可见,第二次的模式 a 没有匹配。其实可以想到,第一次的m/b/g匹配后,匹配位置已经指向了字符串中的下一个位置c,第二行的m/a/g继续从c开始匹配,当然不会匹配到任何东西。
借用一下《精通正则表达式》第7章对于Match运算符的说明:
匹配类型 尝试开始位置 匹配成功时的pos值 匹配失败时的pos值
m/.../ 字符串起始位置(忽略pos) 重置为undef 重置为undef
m/.../g 字符串的pos位置 匹配结束位置的偏移值 重置为undef
m/.../gc 字符串的pos位置 匹配结束位置的偏移值 不变
话说回来,在if中使用/g选项是毫无意义的。这里只是提个醒,当你遇到诡异的无法匹配的问题时,别忘了是不是在if中使用了m//g。
分享到:
相关推荐
Using Perl for Web Programming David Harlan, et al. CONTENTS Chapter 1 Perl Overview Perl Origins H Borrowings H Cost and Licensing H Distribution H G Perl Programs Invocation H Command-Line ...
1、匹配所有可能的模式(g选项) 2、忽略大小写(i选项)例 3、将字符串看作多行(m选项) 4、只执行一次变量替换例 5、将字符串看作单行例 6、在模式中忽略空格 五、替换操作符 六、翻译操作符 七、扩展模式匹配 1...
1、匹配所有可能的模式(g选项) 2、忽略大小写(i选项)例 3、将字符串看作多行(m选项) 4、只执行一次变量替换例 5、将字符串看作单行例 6、在模式中忽略空格 五、替换操作符 六、翻译操作符 七、扩展模式匹配 1...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签等基本...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签等基本...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的 project 也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码 代码语法高亮、代码 代码折叠、交叉...
Hack作者:Roy2 Hack说明:可以直接在管理中心编辑 EMOT 图片(e.g. ),方便不懂 Perl 或是不想手动修改文件的人 参考版本:MX v1.60 修改档案: 1 个(code.cgi) 增加档案:setemoticon.cgi(755) -> cgi-...
Springer Analyzing Computer Systems Performance with Perl Preface ........................................................ vii Part I Theory of System Performance Analysis 1 Time—The Zeroth ...
/dev/vda1 79G 1.6G 74G 3% / udev 3.9G 8.0K 3.9G 1% /dev tmpfs 799M 252K 799M 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.9G 0 3.9G 0% /run/shm # uname -a Linux nj01 3.16.0-34-generic #47~
openssl 1.1.1m最新rpm包,可直接升级
`useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" Zabbix` 启动zabbix server `/data/zabbix/sbin/zabbix_server -c /data/zabbix/etc/zabbix_server.conf` 启动...
例如: install -m 755 -o root -g root amlvm-snapshot /usr/lib/amanda/application/amlvm-snapshot您可能需要在脚本本身的下面一行中编辑Amanda的Perl库的位置。 use lib '/usr/lib/amanda/perl/';配置阿曼达在...
发布前我分别在Open-wrt 12.09和CentOS6.5上测试上传和下载了几个G的文件没有任何问题,可稳定运行。下面就开始说主题吧。 首先说下注意事项,主要是针对之前用过bash版的童鞋 1、Perl版的配置文件与bash版的有...
资源包括:编译好的openssl静态库,openssl-1.0.2m.tar.g压缩包,ActivePerl-5.26.0.2600-MSWin32-x64-403866.exe安装包(Win64),nasm-2.14-installer-x64.exe安装包,附加一个win64下的demo示例
m (多行查找) vaScript动态正则表达式问题 请问正则表达式可以动态生成吗? 例如JavaScript中: var str = "strTemp"; 要生成: var re = /strTemp/; 如果是字符连接: var re = "/" + str + "/"即可 但是要...
* [a-z&&[^m-p]] a through z, and not m through p: [a-lq-z](subtraction) [a-z&&[^m-p]] 从a 到 z, 不包括从 m 到 p: [a-lq-z](子集) * * Predefined character classes 预定义字符序列 * ...
2B显示键码$ xxd $ cat >/dev/null $ sed -nl $ od -c $ vim -> i -> <Cv><key>显示使用的键映射ack ctrl- | perl -ne 'm/(CTRL-.?)/g; print $1."\n";' | sort| uniq Tmux ###反向shell [在本地主机上的tmux会话中]...
'” 注意:perl风格中表达式要求以/开始和结尾,如:/food/ 表匹配字符 food perl修饰符如下: i 完成不区分大小写的搜索 g 查找所有出现(all occurrences,完成全局搜索) m 将一个字符串视为多行(m就表示多...