« 「すぐ分かるPerl」6.7 その他の正規表現 | トップページ | 7.2 文字列の削除 »

2008年5月27日 (火)

「すぐ分かるPerl」7.1 置換処理

■置換演算子「s///」

これは知ってるー。よく404 blog not found の弾さんが使っているので。

今回データとして扱うのはhtmlファイル。
なんかやっとそれらしくなってきた感じだ~!
でも、動的ページ作成とかにはまだまだっぽ行けど、ゆっくりしっかりやっていこう。
最初の一冊だし。

<html>
<! -- love.html -->
<title></title>
<h1>Love Home Page</h1>
Welcome to our page!<br>
Love is great<br>
&#169;1999-2000 Love organization &#169;1999-2000 heart corp
</html>

この中の、「&#169;」を「&copy;」に置換する。

置換演算子の記述の仕方。
sはsubstituteの略。対象は「例のあれ」$_

s/置換前のパターン/置換後のパターン/

置換演算子として記述すると、こうなる

s/&#169;/&copy;/

基本のフィルター。
(思い出してかけたよ!)

while (<STDIN>){
print;
}

置換処理を挟んだフィルター(smpsub.pl)

#! /usr/local/bin/perl
# ampsub -- 実体参照を置換(実はバグっている)

while (<STDIN>){
s/&#169;/&copy;/;
print;
}

このフィルタをつかってみる。
久々にwindowsで実行

C:\Documents and Settings\sironekotoro\デスクトップ>perl "C:\Documents and Settings\sironekotoro
\デスクトップ\ampsub.pl" < love.html > love2.html

実行結果

&copy;1999-2000 Love organization &#169;1999-2000 heart corp

最初の箇所しか置換されていない。
これは置換演算子の特性によるもの。
最後にg(これはglobalの略)を加える事で、すべての文字列の置換を行う。

s/置換前のパターン/置換後のパターン/g

フィルタの場合には

#! /usr/local/bin/perl
# ampsub -- 実体参照を置換(実はバグっている)

while (<STDIN>){
s/&#169;/&copy;/g;
print;
}

となる。これで実行すると、すべての置換が行われる。

■複数の置換演算子を書く

置換演算子は連続して記述が可能。他のアスキーアコードも分かりやすく変換。

# ampsub

while(<STDIN>){
s/&#34;/&quot;/g; # 引用符(quote)  '
s/&#38;/&amp;/g; # アンパサンド(ampersand) &
s/&#60;/&le;/g;  # 小なり(less than)  <
s/&#62;/&gt;/g;  # 大なり(grater than)  >
s/&#153;/&trade;/g; # 商標(trade mark)  (TM)
s/&#163;/&pound;/g; # ポンド記号(pound)  £
s/&#165;/&yen;/g; # 円記号(yen)   \
s/&#169;/&copy;/g; # 著作権(copyright)  (C)
s/&#174;/&reg;/g; # 登録記号(registered) (R)
print;
}

■メモ
グローバル置換のgスイッチと大文字小文字を無視するiスイッチを併用することができる。

s/hi/hello/gi

とすると、全文のなかのhi,HI,Hi,hIが「hello」に変わる。

■メモ
フィルタを利用してデータを置換するときは、下記の順番を取る。
1.フィルター < 変換前 > 変換後
2.変換前と変換後を比較
3.「mv 変換前 変換後」で変換後で変換前を上書き

|

« 「すぐ分かるPerl」6.7 その他の正規表現 | トップページ | 7.2 文字列の削除 »

Perl」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/214806/41190386

この記事へのトラックバック一覧です: 「すぐ分かるPerl」7.1 置換処理:

« 「すぐ分かるPerl」6.7 その他の正規表現 | トップページ | 7.2 文字列の削除 »