タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

Programmingとregular_expressionとperlに関するpipeheadのブックマーク (9)

  • Perlの正規表現で条件分岐する方法

    Perlの正規表現で条件分岐する方法を紹介します。 1.Perlの正規表現で条件分岐する たとえば文字列の先頭に「"」が存在する場合、文字列の末尾に「"」が必須であるパターンと、「"」がないパターン、 "foo" と foo の両方にマッチさせたい場合の正規表現は次のようになります。 ^(")?(?(1)\w+"|\w+)$ サンプルコード #!/usr/bin/perl use strict; use warnings; my $str = '"aaa"'; if ( $str =~ /^(")?(?(1)\w+"|\w+)$/ ) { print "match"; } else { print "not match"; } 解説です。まず、 ^(")? で、先頭にダブルクォーテーション「"」が1文字(または0文字)存在することを判定します。 次に、 (?(1) で、グループ(ここでは1

    Perlの正規表現で条件分岐する方法
    pipehead
    pipehead 2014/09/19
    > "foo" と foo の両方にマッチさせたい場合の正規表現は次のようになります。 ^(")?(?(1)\w+"|\w+)$
  • 置換時に式を評価する / [perl][正規表現] | 戯術者の日記

    /e で。割とよく使われてるはずだからサンプルだけ C/C++ ソースの #ifdef を削る。 @define = qw/__DEBUG __WRITELOG/; # define を指定する # $src にソースを丸ごとつっこむ # #if-#endif $src =~ s|^#if\s+(\w+)(.*?)^(#else(.*?))?^#endif|($1)?$2:$4|emsg; # #ifdef-#endif $src =~ s|^#ifdef\s+(\w+)(.*?)^(#else(.*?))?^#endif|(grep {$_ eq $1 } @define)?$2:$4|emsg; # #ifndef-#endif $src =~ s|^#ifndef\s+(\w+)(.*?)^(#else(.*?))?^#endif|(grep {$_ eq $1 } @define)

  • perl - 文字参照を(en|de)codeする : 404 Blog Not Found

    2008年05月11日21:00 カテゴリLightweight LanguagesTips perl - 文字参照を(en|de)codeする すでに正解が書かれていますが、 [を] Unicode の16進数の実体参照を正規表現などで元に戻す pack と Encode::decode を使うと良いみたい。 はてなブックマーク - miyagawaのブックマーク / 2008年05月11日 それ HTML::Entities::decode / regexp でも chr(hex($1)) のほうがわかりやすくないかな 繰り返しておくだけの価値はあるので。 HTML::Entitiesを使う まず、HTML::Entitiesのdecode_entities()を使うという方法があります。これがベストプラクティスかな。 #!/usr/local/bin/perl use strict;

    perl - 文字参照を(en|de)codeする : 404 Blog Not Found
    pipehead
    pipehead 2008/05/11
    HTML::Entities の decode_entities() と正規表現
  • qr演算子 - 正規表現のリファレンスを作成する - Perl入門ゼミ

    Perl › 演算子 › here 「qr演算子」で正規表現のリファレンスを作成することができます。qr演算子を使うと、正規表現をリファレンスとして変数に保存できます。正規表現のオプションも含めて保存できます。正規表現が、コンパイルされるので、繰り返しパターンマッチを行う場合、高速に動作します。 # 正規表現のリファレンス my $regex = qr/\d+/sm; パターンマッチを行うときは//の中に入れることもできますし、そのまま使用することもできます。//の中にいれたほうが少し見やすと思います。 # //の中で使用 if ($str =~ /$regex/) { ... } # そのまま使用 if ($str =~ $regex) { ... } リファレンスって何? リファレンスについては以下の記事で詳しく解説しています。 リファレンスの使い方をマスターしよう サンプル 正規表現

    qr演算子 - 正規表現のリファレンスを作成する - Perl入門ゼミ
  • 正規表現の拡張構文のうち簡単なもの - 旧燈明日記

    とりあえず、サンプルです。以下はすべてマッチします。 $bbb = '東京都庁'; $ccc = 'とうきょう都庁'; print "Match1", "\n" if ($bbb =~ /東京(?=都庁)/); # 東京の後に都庁が続いている東京にマッチ print "Match2", "\n" if ($bbb =~ /東京(?!議会)/); # 東京の後に議会が続いていない東京にマッチ print "Match3", "\n" if ($bbb =~ /(?<=東京)都庁/); # 東京の後に都庁が続いている都庁にマッチ print "Match4", "\n" if ($ccc =~ /(?<!東京)都庁/); # 東京でないの後に都庁が続いている都庁にマッチちなみに、拡張構文の「東京(?=都庁)」と普通構文の「東京(都庁)」は同じ結果になりますが、すべての拡張構文には後方参照があり

    正規表現の拡張構文のうち簡単なもの - 旧燈明日記
  • Perl正規表現「$& $` $'」のオーバーヘッド検証

    $&によるオーバーヘッドとは? perlfaq6によると **なぜ $&とか$`、$'といった変数を使うとプログラムが遅くなるのですか? プログラムのどこかでそういった変数が使われているのを見つけてしまうと、Perlはすべてのパターンマッチに対してそれに対処することをやらなければなりません。同様のからくりが、$1、$2などを使ったときにも行なわれます。このためすべての正規表現において、部分正規表現を捕捉するために同じコストがかかることになります。しかし、スクリプト中で $&などを全く使っていないのであれば、正規表現は部分正規表現を捕捉して不利になるようなことはしません。ですから、可能であれば $&や$'、$`を使わないようにすべきなのですが、それができないのであれば(一部のアルゴリズムはこれを使うのが便利なのです)、一度これらの変数を使ってしまったら好きなように使いましょう。なぜなら、罰金

    Perl正規表現「$& $` $'」のオーバーヘッド検証
  • perlre - daily dayflower

    Perl 5 以降で使われる正規表現(いわゆる perlre)は,標準的な正規表現とくらべて拡張されています。昔むか〜し(Perl 4 を使っていた頃)は,可搬性が低くなるので個人的に拡張正規表現は使っていなかったのですが,今は便利なだけではなく可読性が高まるので躊躇せず使っています。 指定回数マッチの {数字} 標準正規表現で '12345' =~ m/^\d\d\d\d\d$/と書くところ, '12345' =~ m/^\d{5}$/ のように書けます。\d{3,5} と書くと,3回〜5回の最長マッチ,\d{,5} と書くと5回以下のマッチ,\d{3,} と書くと3回以上の最長マッチを行います。この記法は可読性が高くなるのでよく使います。 あと,(後述しますが)基的に正規表現のコンパイルは変数の interpolation 後に行われるので, my $c = 3; if ('dooo

    perlre - daily dayflower
  • マッチングでエラー「Unmatched [ in regex; marked by~」

    2006年2月 8日(水) 17時13分31秒 [Perl/CGI] マッチングでエラー「Unmatched [ in regex; marked by~」 正規表現を使ったマッチングで、「Unmatched [ in regex; marked by~」という謎のエラーメッセージが出てしまうことがあります。これは、マッチング対象の日語文字列の文字コードがSHIFT-JISだった場合に発生します。この問題を解決するには、問題のある文字の前に「\」を付けるか、文字コードをUnicodeなどに変えてから処理を行う必要があります。 WindowsではSHIFT-JISが標準だし、UTF-8Netscape4が読まないし…という感じで、CGIの文字コードは大抵SHIFT-JISで作ってるんですけども、SHIFT-JISの問題でまた煮詰まりました。(^^;;; 正規表現で文字列の比較を行ってる箇

    マッチングでエラー「Unmatched [ in regex; marked by~」
  • Shift-JISテキストを正しく扱う

    最近の更新履歴 2006-10-28: 「Shift-JISの漢字を含むファイル名/パス名」について若干追記。 2005-03-26: 「最初に」中、XML日語プロファイル第2版に基づき、若干追記。 2005-03-09: 「最初に」中、文章を若干修正。 2003-06-24: Shift-JISの漢字を含むファイル名/パス名 2003-05-31: 「最初に」中、「シフトJIS」などの表記について。 2003-05-24: CP932重複定義文字の変換 2002-08-30: Perl 5.8.0 について。 2002-01-17: 長い文字列に対する正規表現検索 2001-12-15: ShiftJIS::Collate が overrideCJK パラメータを廃止したことに伴う 日語文字列を並び替えるの書き換え。 最初に 日語の文字コードにはいくつかのものが使われています。ある

    pipehead
    pipehead 2001/12/15
    エラーメッセージの意味
  • 1