Perlの正規表現で制御文字を削除する

Perlの正規表現で制御文字を削除する

Posted at July 6,2012 12:55 AM
Tag:[Perl]

Perlの正規表現で制御文字を削除する方法を紹介します。

1.経緯

会社で使っている自作ツール(Perl)があります。

そのツールは、設計書のレビュー時にコメントで質問・回答のやりとりをするというもので、コメントの一覧をテーブル形式で表示することもできます。

ある日、その一覧が途中までしか表示されなくなりました。表示されなくなった境界のデータを確認してみると、「♂」を半角にしたような、みなれない制御文字が含まれていました。

コメントを投入した人に確認してみると、「パワーポイントのふきだしオブジェクトに入力されたテキストをコピー&ペーストした」ということです。

コメントはXML形式で保存し、一覧表示するときはXML::Simpleを使ってデータをパースしているのですが、制御文字が原因で正常にパースできなかったようです。

ということで、次項に制御文字を削除する方法を紹介します。

2.制御文字を削除する

制御文字の削除には、正規表現の「POSIXキャラクタクラス」というものを使います。制御文字の正規表現は次のとおりです。

[:cntrl:]

実際に利用するときにはブラケットを二重にして

[[:cntrl:]]

とします。これをs演算子(置換演算子)に設定して、

$data =~ s/[[:cntrl:]]//g;

とすることで、制御文字が削除できるようです。

3.タブと改行以外の制御文字を削除する

2項の方法ではタブや改行も削除されてしまうので、「否定先読み」を使い、タブと改行以外の制御文字を削除するようにします。

最終的には次のようになります。

$data =~ s/(?![\n\t])[[:cntrl:]]//g;

4.参考サイト

参考サイトは下記です。ありがとうございました。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)