看例子学perl--3

本文详细介绍了正则表达式的使用方法及其在Perl语言中的应用,包括基本语法、特殊字符含义、字符串检索和替换等核心内容,并通过具体实例展示了如何编写Perl函数来处理数据。

表达式:

 

構文 意味
if ( 文字列 =~ / pattern/) 「文字列」与「pattern」匹配
if ( 文字列 !~ / pattern/) 与上相反

 

 


 

文字 意味
/转义
^开头
.任意一个非换行符
$末尾

 

表現 正規表現上の意味
/w英字、数字、アンダースコア。[a-zA-Z0-9_] に同じ。
/W英字、数字、アンダースコア以外の文字。[^a-zA-Z0-9_] に同じ。
/d数字。[0-9] に同じ。
/D数字以外の文字。[^0-9] に同じ。
/tタブ
/rリターン(復帰文字)
/n改行
/fLinefeed 换页号
/s空格。与[ /r/t/n/f] 匹配
/S空格以外的文字。[^ /r/t/n/f]
/aアラーム(ベル)
/dバックスペース
/eエスケープ
/0 + 数字8進法で表すASCII文字。( ex. /033, /040 など )
/x + 英数字16進法で表すASCII文字。( ex. /x1b, /x00 など )
/c[コントロール文字
/l次の1文字を小文字にする
/u次の1文字を大文字にする
/L/Eまでの文字列を小文字にする
/U/Eまでの文字列を大文字にする
/E変更の終わり
/Q/Eまでの文字列で正規表現のメタ文字を文字にみなす
/b単語の境界にマッチする
/B単語の境界以外にマッチする
/A文字列の最初にマッチする。メタ文字 ^ に同じ。
/Z文字列の最後にマッチする。メタ文字 $ に同じ。
$ + 数字グループ化したパターンを後で参照する。( ex. $1, $2, $3, ... )
/ + 数字上記に同じ。( ex. /1, /2, /3, ... )
$&マッチした文字列全体
$`マッチした文字列の前にあるすべての文字列
$'マッチした文字列の後にあるすべての文字列

 

 

匹配置换:


$word = "This is a pen.";
$word =~ s/pen/book/;
print "$word
/n";


<出力結果>
This is a book.

 

 


$_ = "This is a pen.";
s/pen/book/;
print "$_
/n";

<出力結果>
This is a book.

 

注:默认

 

 


$url = 'http://www.kent-web.com/bbs/file/';
$url =~ s/
//bbs //file /////chat //data //
/;

↓ 次のように記述することが可能。(エスケープしない分、書きやすくなる)

$url = 'http://www.kent-web.com/bbs/file/';
$url =~ s|/bbs/file/|/chat/data/|;

 

 

修飾子 意味
g匹配全行
i不分大小写
o只展开一次
m多行操作
s单行
x扩展型
e

 

 


 

▽例文(1)
$word = 'aaaaaa';
$word =~ s/a/A/;
print "$word
/n";

<出力結果(1)>
Aaaaaa

▽例文(2) : g修飾子を使う場合
$word = 'aaaaaa';
$word =~ s/a/A/g;
print "$word
/n";

<出力結果(2)>
AAAAAA

 

$word = "this is 100 yen.";
$word =~ s/(
/d+)/$price = $1*2/e;
print "this is $price yen.
/n";


<出力結果>
this is 200 yen.

注:上例使100变成2倍

 


$word = 'apple';
$word =~ tr/a-z/A-Z/s;
print "$word
/n";

<出力結果>
APLE

 

注:删除重复的字母

 


 

$word = "apple:banana:orange";
@word = split(/:/, $word);

print "@word
/n";


<出力結果>
apple banana orange

 

@word = ("apple", "banana", "orange");
$word = join ":", @word;

print "$word
/n";

<出力結果>
apple:banana:orange

 


 

函数:


$x = 80;
$y = 55;
$z = 75;

&answer;

sub answer {
     $total = $x + $y + $z;
     $mean = $total / 3;

     print "
合計点数は$total 点で、平均点数は$mean 点です。/n";
}


<出力結果>
合計点数は210点で、平均点数は70点です。

 

 


 

&answer(80, 55, 75);

sub answer {
     ($x, $y, $z) = @_;
     $total = $x + $y + $z;
     $mean = $total / 3;

     print "
合計点数は$total 点で、平均点数は$mean 点です。/n";
}


<出力結果>
合計点数は210点で、平均点数は70点です。

注:参数

 

 


($total, $mean) = &answer(80, 55, 75);
print "
合計点数は$total 点で、平均点数は$mean 点です。/n";

sub answer {
     ($x, $y, $z) = @_;
     $total = $x + $y + $z;
     $mean = $total / 3;

     return ($total, $mean);
}


<出力結果>
合計点数は210点で、平均点数は70点です。

 

 


 

1| $word = " 晴れ";
2| &yesterday;
3| print "
今日は$word です。/n";
4|
5| sub yesterday {
6|      $word = "
";
7|      print "
昨日は$word でした。/n";
8| }


<実行結果>
昨日は雨でした。
今日は雨です。

注:局部变量的使用

 


 

1| $word = " 晴れ";
2| &yesterday;
3| print "
今日は$word です。/n";
4|
5| sub yesterday {
6|      my $word = "
";
7|      print "
昨日は$word でした。/n";
8| }


<実行結果>
昨日は雨でした。
今日は晴れです。

注:my的使用

 

 


$word = " 晴れ";
&today;

sub today {
     my $word = "
";
     &yesterday;
     print "
今日は$word です。/n";
}

sub yesterday {
     print "
昨日は$word でした。/n";
}


<実行結果>
昨日は晴れでした。
今日は雨です。

 

 

 


字符串检索

 

 

$str = "ABCDEF";
$sub = "CD";

$find = index ($str, $sub);

if ($find >= 0) {
     $find++;
     print "先頭から$find番目に見つかりました。
/n";
} else {
     print "見つかりませんでした。
/n";
}


<出力結果>
先頭から3番目に見つかりました。

 


 

$str = "apple orange banana";
$sub = "a";

while ( ( $find = index ($str, $sub, $find ) ) >= 0 ) {
     $find++;
     print "$find番目に発見。
/n";
}


<出力結果>
1番目に発見。
9番目に発見。
15番目に発見。
17番目に発見。
19番目に発見。

 


$word = "milktea";
$str = substr($word, 0, 4);
print "$str
/n";


<出力結果>
milk

 

 


 

$word = "tea";
substr($word, 0, 0) = "milk";
print "$word
/n";


<出力結果>
milktea

 


 

$word = "milktea";
substr($word, 0, 4) = "lemon";
print "$word
/n";


<出力結果>
lemontea

 


 

$word = "milktea";
substr($word, 0, 4) = "";
print "$word
/n";


<出力結果>
tea

 


$word = "milktea";
substr($word, -3, 3) = "";
print "$word
/n";


<出力結果>
milk

 

コード 意味
%c文字
%s文字列
%d10進整数
%e浮動小数点数(指数形式)
%f浮動小数点数(固定小数点形式)
%e浮動小数点数
%o8進整数
%x16進整数
%X16進整数(大文字使用)

 

$hour = 5;
$min = 12;
$sec = 6;

$time = sprintf("%02d:%02d:%02d", $hour,$min,$sec);
print "$time
/n";

<実行結果>
05:12:06

 


目录操作:

 

 

opendir(DIR, "/home/");
@file = readdir(DIR);
closedir(DIR);

foreach (@file) {
    print "$_
/n";
}

注:列出/home下列的所有文件

 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值