perl中的正则表达式(my $me = $0) =~ s#.*[\/|\\]##; 是什么意思
(my $me = $0) =~ s#.*[\/|\\]##;
把所有 /或者\ 前面(包括/或者\)的字符去掉
(my $mePref = $me) =~ s#(.*).pl#$1#;
表示去掉.pl后缀名。
在s///操作符中,可以用#、!等来作为分隔符。
(my $mePref = $me) =~ s#(.*).pl#$1#;
也可以写为(my $mePref = $me) =~ s/(.*).pl/$1/;
$me是用来控制该脚本在cmd中运行,而不是在cygwin中运行。是这个意思。
perl 代码中 变量 匹配变量的正则表达式的写法
说一下你的错误:@pattern是数组变量,数组变量访问的形式,要么是@pattern访问全部变量,要么利用$pattern[$i]的形式访问。你直接写$pattern是访问不到任何东西的。所以需要对@pattern再加一个循环进行正则匹配。下面是我写的perl代码,直接读取数组型字符了,为方面没有读入文件,和你说的问题应该类似。结果图也附上了,不知道和你说的是否符合。
#!/usr/bin/perl
@configfile = (“I“,“am“,“a“,“patten1“,“Not“,“Apatten“);
@patten = (“patten1“,“patten2“,“patten3“);
$i=0;
$j=0;
foreach my $line (@configfile)
{
foreach my $pad1 (@patten)
{
if ($line =~ /$pad1/){
print “\$configfile[$i]与\$patten[$j]匹配\n“;
}
$j++;
}
$j=0;
$i ++;
}
perl语言的正则表达式也适用于其他语言吗
正则表达式适用的地方还是很广的,不仅在开发软件里适用,比如perl,java,python里都有用,连文本软件,比如emedit这种也可以使用正则表达式来匹配自己要找的特定文字,语法稍有不同,但本质是一样的
解释下perl的正则表达式里= ! <= #的用法吧!perl的正则表达式
首先?#我没见过…
=============
?=
?!
a(?=b)
匹配后面紧跟为b的a,
a(?!b)
匹配后面不为b的a
==================
?《=
?
(?《=c)a
匹配前面为c的a
(?《!c)a
匹配前面不为c的a《/pre
评论
0
3
加载更多
为什么说perl的正则表达式功能比Python强大
最大的分别就是.. 速度!
从各种的测试都显示, perl 的正则处理依然是最快的 (不只比 python) , 下面的实测可以去看看
https: 斜斜 stuffivelearned 点 org 斜 doku.php?id=programming%3ageneral%3aphpvspythonvsperl
其实 perl 本来就是正则的鼻祖, 它最初的开发的原意很大程度也是为了正则
至於为甚麼比 python 快其实不难想像
-
Perl 不是 OO 语言(虽然有 OO 的玩法), 所以用到正则时, 正接就开始跑, 不用继承一堆有的没的属性和方法. 至於 python 还要先把字串 compile 了做一个物件, 才开始做正则, 在底层自然又多了一重功夫
-
Python 的正则要靠模块来完成, Perl 的正则却已在 perl 解释器的心脏里, 谁会起动的更快就很明显了. 当然, 除了 C Python 还算最快之外, 其他如 JPython, Iron Python 这些要靠 framework 来起动的就必然更慢了
另外就是… 连击和助攻, perl 的正则很可以直接当成 expression (=~ 和 !~ ) 来用, 如:
use utf8;
$wantId = “陈大文“;
die “帐号不能用奇怪字符“ unless $wantId =~ /^[\w\d]+$/ ;
#或者
%user = (
1 =》 { Name =》 “王子“ },
2 =》 { Name =》 “小王子“ }
3 =》 { Name =》 “王妹“ } );
@姓王的 = grep { $user{$_}{Name} =~ /^王/ } keys %user;
# @姓王的 = ( 1, 3)
# 又或者
%mask = ( 1 =》 “M“, 2 =》 “X“, 3 =》 “B“ );
$password = “321“; #普通密码
$maskedPw = undef; #加密密码
$password =~ s/(.)/$maskPw .= $mask($1)/eg;
# maskedPw = “BXM“上面几例, 试问用 python 要写多少行才做到用样的效果呢.. 不过, 这多少语言层次的问题, 姑且另作别论了.
perl 正则表达式中模式分组/y((.)(.)\3 \2) d\1/ 是怎么匹配的
分组是按照左边圆括号“(“的出现次序确定顺序
所以\1是表示((.)(.)\3 \2)中整个的内容,\3表示((.)(.)\3 \2)中内嵌的第二个圆括号中的内容,\2表示内嵌的第一个圆括号中的分组
/y((.)(.)\3 \2) d\1/
这个正则表达式中有空格,所以这个正则表达式可以匹配
y字符跟两个任意字符,重复第三个字符,一个空格,重复第二个字符,一个空格,字符d,重复第二至第五个字符
这个正则可以匹配字符串 “ystt s dstt s”
如果这个正则表达式中没有空格,或者在最后使用了x标记,则可以匹配字符串 “ysttsdstts“
求perl的正则表达式
1.
#!/usr/bin/perl -w
use strict;
my $input =《STDIN》;
chomp $input; #3434
my $re=qr/$input/;
for (12234,12343,435674,234347,3434,23198) {
print “Now what?\n“ if /^$re$/;
}
2. \b3434\b == “在数字的前或后,必须不是数字,或者说必须是空白或者逗号“
关于Perl的正则表达式
首先,g{N}是perl 5.10的反向引用新写法,N是想要反向引用的组号。没有g{N}写法的时候,需要用\1,\2,\3等来表示相对应的反向引用,数字代表括号出现的先后,即为“组号”。在你给出的模式中,只出现了一个括号,所以{}里应该是1,它指“引用第1个括号所匹配的内容”。你理解的可能是,因为b出现2次所以括号里应该是2,错在没理解g{N}中N的含义。另外,这个模式比较简单,其实没必要用g{},只需/a(.)\1a/即可。
perl 正则表达式 | 顺序
为了拿到这几分,我可是下了功夫的。
首先说明下运行结果:
$str = ’“double-quoted \“string\042“’
$sum = ’“double-quoted \“’
再解析你的正则表达式的意图:
最外层小括号里面:
$str的匹配企图: “ (\“ | \3个数字 | 换行符以外的所有字符) 单个字符“
$sum的匹配企图:“ (换行符以外的所有字符 | \“ | \3个数字)单个字符“
必须明白的一个原则是:Perl找到匹配结果就不会继续,除非你定义需要继续匹配。所以,$str的匹配简单来说就是 “ \“ 单个字符“,而$sum的匹配简单来说就是 “换行符以外的所有字符 单个字符“
所以$sum很快就找到匹配了。在第二个冒号出现的时候已经符合了匹配结果。
而为什么$str可以继续匹配呢?因为必须必须匹配到 “ \“ “,总计3个冒号。这就是区别。
最重要的一点,使用符号 | 的作用并不是像你这样用的。Pearl在找到符号|最左边已经匹配后,并不会继续运行。所以你的 | 后面的内容完全不会运行。。。当然,就你提供的$_值来说,因为有匹配项,所以不会运行的。。
打了这么多字,真累。楼主的正则表达式这么复杂,更累。。。为什么不可以简单一点做呢?。。。
perl中的正则表达式字符串的匹配以下要求
您好,如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话,相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能,所以对字符串的处理能力非常强。在Perl语言的程序中,经常可以看到正则表达式的运用,在 CGI 程序设计中也不例外。
正则表达式是初学 Perl 的难点所在,不过只要一旦掌握其语法,你就可以拥有几乎无限的模式匹配能力,而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原则。
正则表达式在对付数据的战斗中可形成庞大的联盟——这常常是一场战争。我们要记住下面八条原则:
· 原则1:正则表达式有三种不同形式(匹配(m/ /),替换(s/ / /eg)和转换(tr/ / /))。
· 原则2:正则表达式仅对标量进行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 将把@array作为标量对待,因此可能不会成功)。
· 原则3:正则表达式匹配一个给定模式的最早的可能匹配。缺省时,仅匹配或替换正则表达式一次( $a = ’string string2’; $a =~ s/string/ /; 导致 $a = ’string 2’)。
· 原则4:正则表达式能够处理双引号所能处理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb扩展为变量;如果 $varb = ’a’ $a = ’as’,$a =~ s/$varb/ /; 等价于 $a =~ s/a/ /; ,执行结果使 $a = “ s“ )。
· 原则5:正则表达式在求值过程中产生两种情况:结果状态和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出现,$a =~ s/(word1)(word2)/$2$1/ 则“调换”这两个单词。
· 原则6:正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a =~ m/w+/ 匹配一个或多个单词字符;$a =~ m/d/“ 匹配零个或多个数字。
· 原则7:如果欲匹配不止一个字符集合,Perl使用 “|“ 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于“匹配字符串 cat 或者 dog。
· 原则8:Perl用 (?..) 语法给正则表达式提供扩展功能。(这一点请同学们课后看相关资料)
想要学习所有这些原则?我建议大家先从简单的开始,并且不断的尝试和实验。实际上如果学会了 $a =~ m/ERROR/ 是在 $a 中查找子串ERROR,那么你就已经比在 C 这样的低层语言中得到了更大的处理能力。