このページでは開発したプログラムコードをチップ化してご紹介しています。後ほどわかり易く分類化して整理する予定です。
print "xyz"x3; print "\n";(2) 文字列の連結 文字列を連結するには連結演算子(.)を使います。
$I=$x="abc"."djf"."kgoer"; print "$I\n";(3) 文字列の分解(split) 文字列を分解するにはsplit関数を使用します。[split/区切り文字/,文字列] split関数は区切り文字(正規表現)で「文字列」を分解し、そのリストを返します。文字列を省略すると、特殊変数「$_」が分解の対象になります。
$x="sfko-skfjie-fgerniuo-oiekfjd"; @array=split /-/,$x; print "@array\n";(4)文字列分解 split関数に分解数を指定することもできます。 [split /区切り文字/,文字列,分解数]このときには指定した分解数に分解されます。次のスクリプトのsplit関数では分解数を3にしているので、変数$cは3つに分解されます。最後の要素「ghj-jik」となります。
$c="jfei-jkige-jigew-khtrit"; @array=split /-/,$c,3; print "@array\n";(5)文字列の連結(join) 文字列を連結するにはjoin関数を使います。[join 連結文字,リスト] join関数は、[リスト]を「連結文字」を使って連結します。
@x=(bav,dert,kgro,rlpg); $str=join "+*-/",@x; print "$str\n";●連結文字に殻の文字列""を指定した場合には、そのまま連結します。
@x=(bav,dert,kgro,rlpg); $str=join "",@x; print "$str\n";(6)文字列の一部を取り出す[substr] 文字列の一部取り出すには、substr関数を使います。[substr 文字列,位置,長さ] 位置は取り出す開始位置を文字数(バイト数)で指定します。位置は0から始まります。負の値を指定すると、文字列の末尾からの位置になります。[長さ]は取り出す長さを文字数(バイト数)で指定します。長さを省略した場合には、位置から最後の文字まで取り出します。
$str="Do you like an apple! HOPE YOU ARE WELL DOING"; print substr($str,3,8),"\n"; print substr($str,5,10),"\n"; print substr($str,20,20),"\n";(7) 文字列を検索してその位置を返す(index,rindex) 文字列を検索してその位置を返すにはindex関数を使用します。[index 文字列,検索 文字列,検索開始位置]。index関数は文字列の中の検索文字列を検索開始位置から検索して、最初に見つかった検索文字列の先頭から位置が返ります。
$str="Do you like an apple! HOPE YOU ARE WELL DOING"; print index($str,like),"\n"; print index($str,like,5),"\n"; print index($str,well,10),"\n";(8) rindex関数 [rindex 文字列,検索 文字列,検索開始位置]rindex関数は最初に見つかった「検索文字列」の位置を返します。
print rindex($str,like),"\n"; print rindex($str,like,5),"\n"; print rindex($str,well,10),"\n";(9) 大文字と小文字を変換する(lu,uc) 大文字を小文字に変換するにはlc関数を使い、小文字を大文字に変換するにはuc関数を使用します。
$str="Do you like an apple! HOPE YOU ARE WELL DOING"; print lc $str,"\n"; print uc $str,"\n";(10) 文字列の長さを返す(length) 文字列の長さ(バイト数)を返すにはlength関数を使います。[length 文字列]
print length("ikeda takamitsu"); print "\n";(11) 文字列の検索(m演算子) ある文字列の中に特定の文字列が含まれているかどうかを調べるには、m演算子を用います。m演算子の構文は次のとおりです。[m/文字列/]通常、検索の対象となるのは、特殊変数「$_」ですが、パターン結合演算子「=~」を使うと、検索の対象となる変数を指定することができます。[変数=~m/文字列/]
$a="ABCDE"; if($a=~m/AB/){ print "ABが含まれています。\n"; }else{ print "ABが含まれていません\n"; }上のスクリプトは特殊変数[$_」を使って次のように書き直すことができます。
$_="ABCDEJGFEJGNEIOdSnOIGED'UWEGABJIGREIPDSMOL`P"; if(m/AB){ print "ABが含まれています。\n"; }else{ print "ABが含まれていません\n"; }●m演算子 m演算子でパターンマッチを行うときに、修飾子でオプションを指定することができます。[m/文字列/修飾子]
$A="ABCDEDFD"; print "置換前 a=$a\n"; $a=~s/BCD/bcd/; print "置換え後 a=$a\n";●s演算子 s演算子でパターンマッチを行うときにも、m演算子と同様に修飾子でオプションを指定することができますs。 s演算子で指定できる修飾子には次のようなものがあります。
$a=~tr/abcde/ABCDE/; $a="this is an apple"; print "置換え前 a=$a\n"; $a=~tr/abcde/ABCDE/; print "置換え後 a=$a\n";(14) 正規表現によるパターンマッチ ●メタ文字 これまで特定の文字列をパターンとするpターンマッチの例をみてきましたが、Aで始まる5文字の例、末尾がzで終わる文字列、アルファベットと数字だけからなる文字列等をパターンとしてパターンマッチを行いときがしばしばあります。 これを可能にするのが、通常の文字列やメタ文字と呼ばれる特殊な文字を組み合わせて表現します。
$a="NVNNJIOPgABCDERFSEMPGES"; if($a=~m/A..D/){ print "$&とマッチしました"; }else{ print "マッチしませんでした"; }$_はマッチした部分を返す特殊変数です。マッチした文字列の前の部分は特殊変数「$」に後ろの部分は特殊変数「$」に格納されます。 ●文字クラス [] 文字クラスは[]の中に文字を並べたもので、それらの文字列の中の1文字とマッチします。たとえばA[xyz]BはAxB,AyB,AzBの3種類の文字列にマッチします。文字クラスの中で「-」を使うと、文字の範囲を示すことができます。たとえば「abcdef」は[a-f]と書くことができます。文字クラスの中で。[の直後に^をおくと、否定を意味します。たとえば[^abcd]はabcd以外の1文字にマッチします。
$a="Myname is mike dabis"; print "置換え前 $a\n"; $a=~tr/[a-z]/[A-Z]/; print "置換え後 $a\n";
$_="ABCDEFGSSSXXXXXYHIJK"; if(m/X+Y/){ print "$&とマッチしました。"; }else{ print "マッチしませんでした。"; }
$_="ABCDEFGSSSXXXXXYHIJK"; if(m/X?Y/){ print "$&とマッチしました。"; }else{ print "マッチしませんでした。"; }(15) グループ 正規表現をまとめてグループ化するには、()を使用します。たとえば、A(bc)?dという正規表現は、「Ad」または「Abcd」にマッチします。これはbcがグループ化され、それに対して?が適用されるからです。 ●グループ化()
$_="ABCDEFABCDSGHIJK"; if(m/(XY)+/){ print "$&とマッチしました"; }else{ print "マッチしませんでした"; }●選択 | |を使うと正規表現の選択が行えます。たとえばab|Ab|aBは「ab」「Ab」「aB」にマッチします。またA(xy|XY)BはAxyBまたはAXYBにマッチします。
$_="AxyBAXYB"; if(m/Ax|BA/){ print "$&とマッチしました"; }else{ print "マッチしませんでした"; }●位置 これまでに説明した正規表現は、マッチする文字列の位置を指定することはできませんでした。たとえば、定冠詞theを大文字にするために、s/the/THE/gのような置換えを行いたいとします。しかし、これではmathematicsをmaTHEmaticsと変えてしまうような置換えも行ってしまいます。これを防ぐためにパターンの位置を示す、次のようなメタ文字が用意されています。