Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5376327
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2009-04-11 19:09:41

$str = "123abcd456";
@match = $str =~ /\d/g; # 1 2 3 4 5 6

 
$str = "yes is your answer."; $yes = "yes";
print "match\n" if ( $str =~ m/$yes/ ); # match

print "match\n" if ( $str =~ m'$yes' ); #

 
open (DICT,"/usr/share/dict/words") or die "Can't open dictionary: $!";
while ( <DICT> ) {
     $first_word = $1 if ?(^aba.*)?;
     $last_word = $1 if /(^aba.*)/;
}
print "$first_word\n"; # aback

print "$last_word\n"; # abating

 
$text = "3 2 1 wow!";
# use /gc to remember position

while ( $text =~ /(\d)/gc ){ print "$1...\n"; }
# use \G to match rest of text

if ( $text =~ /\G\s*(.+)$/ ) { print $1, "!\n"; }
# 3...

# 2...

# 1...

# wow!

 
$text = "proton";
while ( $text =~ /(..)/g ) { print "[$1]"; }
# [pr][ot][on]

while ( $text =~ /(?=(..))/g ) { print "[$1]"; }
# [pr][ro][ot][to][on]

 
$string = "one=1 two=2 three=3";
%hash = $string =~ m/(\w+)=(\w+)/g;
 

s operator

--------------------------------------------------------------------------------
 
$pop = "12398712376";
$pop =~ s/(?<=\d)(?=(?:\d{3})+$)/,/;
print "$pop\n";
# 12,398712376

 
$pop = "12398712376";
$pop =~ s/(?<=\d)(?=(?:\d{3})+$)/,/g;
print "$pop\n";
# 12,398,712,376

 
$pop = "12398712376";
$pop =~ s/(\d)(\d{3})/$1,$2/g;
print "$pop\n";
# 1,2398,712376

 
$pop = "12398712376 345345345";
while ( $pop =~ s/(\d)(\d{3})\b/$1,$2/ ){ print "$pop\n"; }
# 12398712,376 345345345

# 12398,712,376 345345345

# 12,398,712,376 345345345

# 12,398,712,376 345345,345

# 12,398,712,376 345,345,345

 
$pop = "12398712376 345345345";
while ( $pop =~ s/(\d)(\d{3})\b/$1,$2/g ){ print "$pop\n"; }
# 12398712,376 345345,345

# 12398,712,376 345,345,345

# 12,398,712,376 345,345,345

 
$a = 123;
$a =~ s/2/2*4/e;
# 183


$b = 123; $c = 2*2;
$b =~ s/2/" $c*2 "/e;
# 1 4*2 3


$b = 123; $c = 2*2;
$b =~ s/2/" $c*2 "/ee;
# 183

 
$string = "anatoliy";
$string =~ s/(\w)/uc($1)/ge;
# ANATOLIY

 
$str = "1.Smith\n\tJey\n\tAn\n2.Shevchenko\n\tTaras\n";
while ( $str =~ /(^\d.*$)/gm ) {
    print "$1\n";
}
# 1.Smith

# 2.Shevchenko

 
$_ = "1\n2\n9";
$_ =~ s/./+/g;
# +

# +

# +

$_ =~ s/./+/sg;
# +++++

 
$str = "aBcDe";
$num = $str =~ s/([a-z])/uc($1)/eg;
print "\$str: $str\n"; # $str: ABCDE

print "\$num: $num\n"; # $num: 3


$str = "aBcDe";
($num = $str) =~ s/([a-z])/uc($1)/eg;
print "\$str: $str\n"; # $str: aBcDe

print "\$num: $num\n"; # $num: ABCDE

 
# put commas in the right places an integer ( from "Camel Book" ).

$_ = "2343454567";
1 while s/(\d)(\d{3})(?!\d)/$1,$2/;
print "$_\n"; # 2,343,454,567

 
# expand tabs to 8-column spacing ( from "Camel Book" ).

$_ = "abc\t\t\tABC\t3";
1 while s/\t+/'.' x (length($&)*8 - length($`)%8)/e;
print "$_\n";
# abc.....................ABC.....3

 
# remove nested remarks ( from "Camel Book" ).

$_ = "abc (123(second) ( third )) the end";
1 while s/\([^()]*\)//g;
print "$_\n"; # abc the end

 

tr operator

--------------------------------------------------------------------------------
 
$str = "Hello World!";
$str =~ tr/a-z/./; # H.... W....!


 
$str = "Hello World!";
$str =~ tr/a-z//d; # H W!


 
$str = "Hello World!";
$str =~ tr/a-z//cd; # elloorld


 
$str = "Hello World!";
$str =~ tr/a-z/./c; # .ello..orld.


 
$str = "Heellooo WWoorld!!";
$str =~ tr/a-z//s; # Helo WWorld!!

 

qr operator

--------------------------------------------------------------------------------
 
my $np;
$np = qr{\((?:(?>[^()]+)|(??{$np}))*\)}x;
my $funpat = qr/\w+$np/;
my $s = 'my_function_call(1,(2*(3+4)),5)';
if ( $s =~ /^$funpat$/ ){ print "match\n"; }
# match


 
$palindrom = qr/^ (.+) .? (??{quotemeta reverse $1}) $/xi;
print "Pattern: $palindrom\n";
for ( qw(abcba a bddb abvcba), "" ){
    print "",
    (($_ !~ /$palindrom/) ? "NOT " : "") . "MATCH => $_\n";
}
# Pattern: (?ix-sm:^ (.+) .? (??{quotemeta reverse $1}) $)

# MATCH => abcba

# NOT MATCH => a

# MATCH => bddb

# NOT MATCH => abvcba

# NOT MATCH =>


 
# match nested parentheses

my $p;
$p = qr{(?: ({) | (<)) (?:(?>(?(1)[^{}]+|(?(2)[^<>]+)))|
            (??{$p}))*
            ( ?(1)} | (?(2)>) )
         }x;
my $mp = qr/m$p/;
my $s = "test m> the end";
if ( $s =~ /$mp/ ){ $s =~ s/$mp/MATCH/; print "$s\n";}
# test MATCH the end

 

split operator

--------------------------------------------------------------------------------
 
# "Mastering Regular Expressions", 2nd edition, ch7.


my $text = "IO.SYS:22558:95-10-03:s-sh:optinal";
print qq('$_', ) for ( split(/:/=>$text) );
# 'IO.SYS', '22558', '95-10-03', 's-sh', 'optinal',

print qq('$_\', ) for ( split(/:/ ,$text, 3) );
# '
IO.SYS', '22558', '95-10-03:s-sh:optinal',
my ($x,$y,$z) = split (/:/=>$text);
print "( \$x=$x, \$y=$y, \$z=$z )\n";
# ( $x=IO.SYS, $y=22558, $z=95-10-03 )

 
my @Paragraphs = split(m/\s*

\s*/i => $html); # by paragraphs
my @Lines = split(m/^/m => $lines); # logic lines

 
print qq('$_', ) for ( split(// => " a short test ") );
# '
', ' ', 'a', ' ', 's', 'h', 'o', 'r', 't', ' ', ' ', 't', 'e', 's', 't', ' ', ' ',
print qq('
$_', ) for ( split(' ' => " a short test ") );
# '
a', 'short', 'test',
print qq('
$_', ) for ( split(/\s+/=> " a short test ") ); # to save beginning
# '
', 'a', 'short', 'test',
print qq('
$_', ) for ( split(/ / => " a short test ",-1) ); # !!
# '
', '', 'a', 'short', '', 'test', '', '',
print qq('
$_', ) for ( split(/s+/ => " a short test ") ); # !!
# '
a ', 'hort te', 't ',

 
print qq('
$_', ) for ( split(/(\s)+/=> " a short test ") );
# '
', ' ', 'a', ' ', 'short', ' ', 'test', ' ',
print qq('
$_', ) for ( split(/(\s+)/=> " a short test ") );
# '
', ' ', 'a', ' ', 'short', ' ', 'test', ' ',
print qq('
$_', ) for ( split(/( )/ => " a short test ") );
# '
', ' ', '', ' ', 'a', ' ', 'short', ' ', '', ' ', 'test', ' ', '', '

阅读(1675) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~