KAIHATSUGIKEN GROUP
************************************************************************************
17 さらに正規表現
**********************
大文字小文字を無視してマッチさせるには
そんなときは i オプションを使います。
例えば
/ab/i
にすると
"ab""Ab""aB""AB"
とマッチします。
*************************
単語の境界とマッチさせる
そんなときは /b オプションを使います。
book と言う正規表現は booksore handbook の両方ともにマッチしますが、
/bbook/b
にする事によって book という単語にだけマッチします。
**************************
繰り返しの回数を指定する
* は0回以上
+は一回以上の繰り返しでしたがもっとはっきりと指定する方法があります。
n には数を指定します。
{n} n回
{n,} n回以上
{n,m} n回以上、m回以下
となります。
例えば、
bo{2.4}nは
boon, booon, boooon
にマッチします。
回数を指定できる訳ね・・・
******************************
最長マッチと最短マッチ
次のプログラムではどうなるのでしょうか?
use English;
$str ="<12><34><56>";
if($str=~/<.*>/{
print"$match\n";
}
<,*> というのは<で始まり> で終わっていればその間はどんな文字でも構いません。
と言うことは次の6通りが考えられます。
<12><34><56>
<12><34>
<12>
<34><56>
<34>
<56>
となります。
さてどれがマッチするのでしょうか?
結局 <.*>は 可能な限り長い文字列とマッチしようとします。
だから 最も長い文字列でマッチするのは
<12><34><56>
となります。
最短マッチはどうなるのでしょう?
<.*?>にすると可能な限り短い文字列とマッチするようになります。
use English;
$str ="<12><34><56>";
if($str=~/<.*?>/{
print"$match\n";
}
こうすると
一番短くてこれも最初の方が優先されます。
だから
<12>
となるわけです。
**********************************
繰り返しマッチ
文字列の中ノ瀬行き表現にマッチする部分を全て調べたい場合があります。
そんなときはgオプションとwhileを使います。
use English;
$str="<12><34><56>";
while($str=~/<.*?>/g){
print"$match\n";
}
こうすると
<12>
<34>
<56>
となります。
**********************
最後の改行を取り除く
すでに出てきましたが最後の改行を取り除く関数は chomp です。
引き数なしの場合は、 $_の最後の改行を取り除きます。
引き数で変数を指定するとその変数の最後の改行を取り除きます。
****************************
文字列をつなぐ
文字列をつないで新しい文字列を作る演算子は .(ピリオド)です。
例えば
$b="Cloud";
$c-"Barett";
$t="Tifa";
$str=$b.$c.$t;
とすると$strには、$b,$c,$t,をつないだ "CloudBarettTifa"という
文字列が代入されます。
$str="$b$c$t";
としても同じです。
便利だねー
ピリオド演算子は
$a.=$b;
とすると
$a の後ろに $b を追加します。
「.=」は「+=」と同じです。
$a.=$b;は$a=$a.$b; と同じです。
**********************************
部分文字列を取り出す
文字列を取り出すためには substr を使います。
$substr($str,2,3)
となっていれば文字列の2つ目から3つ分を取り出すことを表します。
$substr($str,-8,3)
となっていれば文字列の最後から8個目から3つ分を取り出すことを表します。
$substr($str,2,-5)
となっていれば文字列の2つ目から最後の文字から5つ目迄を取り出すことを表します。
$substr($str,2)
となっていれば 文字列の2つ目から全部を取り出すことを表します。
1234567890
が文字列だとすれば
$substr($str,2,3) 345
$substr($str,-8,3) 345
$substr($str,2,-5) 345
$substr($str,2) 34567890
となります。
さらに substr は 代入もできます。
$str="0123456789"
substr($str,2,3)="*****";
print"$str\n";
とすると
$str の部分に*****が代入されます。
実行すると
全ての文字列の中から最初の2つ目から3つの文字列を取り出すのですから
234を取り出し、***** に代入します。
よって
01***56789
となります。
*******************************
文字の置き換え
ある文字を全部別の文字に置き換えると言うこともできます。
tr と言う 関数を使います。
置き換えもとの文字と置き換え先の文字を指定します。
「tr/元の文字/先の文字」と書きます。
$str="abcdefabcdef";
$str=~tr/acd/CEA/;
$print"$str\n";
$str=~tr/acd/CEA/;
は acd の文字列を全て CEA に置き換えると言う意味です。
実行すると
CbEdAfCbEdAf
となります。
***************************************
同じ文字列を繰り返した文字列を作る
文字列x回数
で 文字列を回数分だけ繰り返すことが出来ます。
x は エックスです。
例えば
$str="abc"x5;
となっていれば$strには
abcabcabcabcabc
が代入されます。
$str="abcx8";
となっていればabc は8回繰り返して代入されます。
**********************************************