ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    PHPの正規表現

    このエントリーを含むはてなブックマーク はてなブックマーク - PHPの正規表現 あとで読む
    ●正規表現は面倒くさい
    プログラミングで文字列を処理するとき、正規表現がうまく使いこなせていない。
    すぐにマッチングのパターンが思いつかない。
    それどころか、苦手意識さえある。

    正規表現 - Wikipedia

    正規表現(せいきひょうげん、regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。
    正則表現、正規式と呼ばれることもある。
    プログラミングにおいて正規表現を用いた文字列のパターンマッチを行う機能のことを、単に正規表現という。



    正規表現を使う=マッチングのパターンを組み立てるのが面倒くさい

    「細かさ、精密さを要求される作業は、チマチマしていて面倒くさい」と感じる心情=怠惰さが、心の中でブレーキになってしまい、正規表現を積極的に使おうとしていない原因だ。

    ●PHPの正規表現
    PHPの場合、正規表現は2種類用意されている。

    (1) POSIX拡張の正規表現
    http://jp.php.net/manual/ja/book.regex.php
    (2) Perl互換の正規表現
    http://jp.php.net/manual/ja/book.pcre.php

    (1)と(2)の違いは、
    ・処理速度
    ・マッチングパターンの豊富さ
    ということらしい。

    Posix拡張正規表現

    PHPでは、Posix拡張正規表現を利用することができます。
    Posixとは、Portable Operating System Interface for UNIX の略で、 Linux を始めとする Unix 互換OSが満たすべき仕様を定めたものです。
    Perl互換正規表現よりも機能は限定されていますが、汎用性は高いです。



    機能の豊富さで比較すると、
    POSIX互換正規表現 < PERL互換正規表現
    ということで、簡単に済む場合はPOSIX互換、複雑な場合はPerl互換の正規表現を使い分ければいい。

    ●チートシートで手軽に使う
    面倒くさい、手間がかかるという心情を解決する一つの方法として、チートシート(早見表)を用意することが有効だ。

    Perl互換の正規表現(PCRE)のチートシート(英語版)が配布されていた。
    http://phpspot.org/blog/archives/2006/07/phppcre.html


    チートシートではないが、PHPで使える正規表現のパターン(マッチ演算子)のまとめもあった。
    http://www.rider-n.sakura.ne.jp/regexp/regexp.php

    ●正規表現以外の方法
    正規表現でうまく処理できない複雑な文字列の場合、構文解析という仕組みを利用する。

    正規表現に見切りをつけるとき

    正規表現の処理能力を超えるフォーマットというのが存在します。
    その典型的な例が、XMLやJSONのように、入れ子になったデータフォーマットです。

    正規表現の能力を超えるデータはどう扱えばいいのか?
    一番のお勧めは、ANTLRを使って字句解析(lexer)、構文解析(parser)するプログラムを生成する方法です。
    一昔前なら、lex/yacc、flex/bison, JavaCCなどしか選択肢がなかったのですが、今は断然ANTLRが便利です。



    ●ANTLR
    ANTLR - Wikipedia

    ANTLR(ANother Tool for Language Recognition)とは、LL(k)構文解析を用いたパーサ生成器である。
    PCCTS(Purdue Compiler Construction Tool Set)の後継として1989年に開発され、現在も活発に開発が続いている。

    他のパーサ生成器で一般的な正規表現に基づいたものではなく、EBNFに似た形式となっている。
    現在のところ、ANTLR は C++、Java、Python、C# のいずれかの言語のコード(構文解析器のコード)を生成する。



    ANTLRとは - はてなキーワード

    ANTLR あんとえるあーる
    ANTLR の読み方は、「あんとらー」という説もある。



    antlr/ANTLRWorksを使ってみる

    ANTLRは、yacc, lexと同じコンパイラー・コンパイラーです。
    ANTRLを使うことで、
    * 言語のコンパイラ、
    * 言語のインタプリタ
    * 他の言語への変換ツール
    を容易に作成することができます。



    正規表現をマスターしたら、次はANTLRだな。

    正規表現ポケットリファレンス (POCKET REFERENCE)正規表現ポケットリファレンス (POCKET REFERENCE)
    (2006/02)
    宮前 竜也

    商品詳細を見る

    関連記事

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    http://hamamuratakuo.blog61.fc2.com/tb.php/329-66c12be1

    FC2Ad