my $what="fred"; while(<>){
if(/^($what)/){
print "We saw $what in beginning of $_";
}
} () can ctach the characters in it as varables,called $1,$2,$3 ....
The first () gets $1,second gets $2,.... caculate by the left ( $_="Hello there,neighbor";
if(/\s(\w+),/){
print "the word was $1\n"; # print "the word was there"
} $_="Hello there,neighbor";
if(/(\S+) (\S+),(\S+)/){
print "words were $1 $2 $3\n";
} The life sycle of a caught variable go until next successful match,which overIDe it. If we only want () make group but not catch variable,we can use non-catch (). $_="a saurus steak for dinner";
if(/(?:bronto)?saurus (steak|burger)/){
print "Fred wants a $1\n";
} The ?: behind ( makes that () not catch variable. We can name the caught variable instead of $1 $2 .... the numberic style. my $names="Fred or barney";
if($names=~/(?<name1>\w+) (?:and|or) (?<name2>\w+)/){
print "I saw $+{name1} and $+{name2}\n";
} (?<LABLE>PATTEN) LABLE can be any name we like,all the names are stored in hash %+ Using the named variables we can insert more () not worrying the $number,\g{1} can also named as \g{lable} my $names="Fred Flintstone and Wilma Flintstone";
if($names=~/(?<last_name>\w+) and \w+ \g{last_name}/){
print "I saw $+{last_name}\n"; # Flintstone
} if("Hello there,neighbor"=~/\s(\w+),/){
print "That actually matched '$&'.\n";
} if("Hello there,/){
print "That was ($`) ($&) ($').\n";
} $& is what /patten/ matches,$` is parts before $&,$' is parts after $&. /a{m,n}/ matches 'a' appears m to n times
/a{m,}/ matches 'a' appears at least m times
/a{m}/ matches 'a' appears exactly m times RE has its connect order like this: Patten Examples
() (...) (?:...) (?<LABLE>...)
* + ? {} a* a+ a? a{m,n}
^ $ abc ^a a$
| a|b|c
element a [abc] \d \1 Exersices: 1. Write a program,make it match 'match' and print the parts before and after it. #!/usr/bin/perl while(<>){
if(/match/){
print "That was |$`<$&>$'|\n";
}
}
########################## 2. Write a program,make it match words(made of \w) end with 'a'. #!/usr/bin/perl while(<>){
chomp;
if(/\w+a\b/){
print "That was |$`<$&>$'|\n";
}
}
########################## 3. Modify last program,catch the words end with 'a' in $1. And print it like: $1 contains 'Wilma'. #!/usr/bin/perl while(<>){
chomp;
if(/(\w+a\b)/){
print "\$1 contains '$1'\n";
}
}
########################## 4. Modify last program,catch words into named variable. And print it like: 'word' contains 'Wilma'. #!/usr/bin/perl while(<>){
chomp;
$lable="word";
if(/(?<$lable>\w+a\b)/){
print "'$lable' contains '$+{$lable}'\n";
}
}
########################## 5. Modify last program, print the word ended with 'a' and the following 5 characters(if there are). #!/usr/bin/perl while(<>){
chomp;
if(/(?<word>\w+a\b)(?<more>.{0,5})/){
print "$+{word}|$+{more}\n";
}
} ########################## 6. Write a new program,print all lines ended with sapce character(s),print more character(s) to make it human readable. #!/usr/bin/perl while(<>){ chomp; if(/\s+$/){ print "$_|\n"; }}########################## 总结
以上是内存溢出为你收集整理的Perl Learning - 14 (Catch var, (:?), (:<LABLE>), \g{LABLE}, {m,n}全部内容,希望文章能够帮你解决Perl Learning - 14 (Catch var, (:?), (:<LABLE>), \g{LABLE}, {m,n}所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)