正規表現技術入門 ――最新エンジン実装と理論的背景
番外編●特別コラム
番外編●特別コラム[知っておきたい]正規表現にまつわる基本Q&A
プログラミングの世界には実に多くの技術や方法論が溢れていますが,
本記事では,
*
(アスタリスク)は,「任意の文字列」(ワイルドカード)を表す正規表現?
Q:正規表現って便利ですよね。
rm -rf *
などなど,
A:
A:はい,*
は
Q:ええっ,
42は2進法では101010で,
ASCIIコードでは *
に当たる。正規言語(パターンマッチ) で *
の文字は任意(=万物) の文字列と置き換えられる 「ワイルドカード」 として用いられることが多いので, *
=「42」 が万物の答えなのではないかという説がある。
A:*
はASCIIコード的に言うと*
は*
単体ですべての文字列を表すわけではありません。どうも上の間違った一節はWikipediaの2005年9月11日
Q:そうなのですね。でも,rm -rf *
を実行すると,
A:それはグロブ
昔々UNIX V6では,
ワイルドカードパターンを展開する/etc/ globと言うプログラムがあった。その後すぐに, この機能はシェルに組み込まれるようになった。 今日では,
この機能をユーザプログラムからも実行できるよう, glob (3) というライブラリルーチンも存在している。
グロブでは*
は?
は.
が.*
が
正規表現とグロブは,*
や?
が特別な文字[0-9]
が使えたり,
- 注1)
- この一節は,
2012年1月3日 (火) に削除されています。07:32
正規表現でメールアドレスを表現できる?
Q:なるほど,
A: いいえ。正規表現ではメールアドレスを厳密に表現することは不可能です。
Q:えぇ!! 不可能だなんて言い切っちゃうことができるんですか?
A:はい。
Q:なるほど......。あれ? でも,
A:それを理解してもらうには,
Q:
A:とは言え,
たとえば,<input type=email></input>
というメールアドレスのバリデーションを行ってくれるインプット要素
^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
メールアドレスに関しては妥当性の怪しい
正規表現エンジンの実装がいっぱいあるのはなぜ? 違いはあるの?
Q:なるほど,
A:とても良い点に気づきましたね。はい,
- オートマトンという計算モデルを基本とするDFA型
(図2) - 仮想マシンによるバックトラック処理を基本とするVM型
(図3)
の2種類の正規表現エンジンがあります。DFA型かVM型かでサポートしてる機能や性能にも違いが出てきますし,
Q:へぇ,
A:そこは正規表現ユーザにとって気になるところですよね。でも,
Q:ふむふむ。それぞれどんなしくみなのかちょっと興味が湧いてきました。でも,
A:正規表現エンジンのしくみを知らなくても正規表現を使うことはできます。しかし,
[書籍紹介]正規表現技術入門――最新エンジン実装と理論的背景
Q&Aはいかがでしたか。2015年4月発売の
正規表現を知らない人やもっと知りたい人へ
「最新エンジン実装と理論的背景」
正規表現エンジンのしくみと理論的背景は
各話題をその道のエキスパートが担当
本書では正規表現の話題を幅広く扱っています。たとえば,
- 正規表現技術全般やDFA型エンジンの解説は著者新屋
(正規表現・ オートマトン理論の研究者) - VM型エンジンの解説は著者高田
(Rubyの組み込み正規表現エンジン 「鬼雲」 開発者) - JavaScriptの正規表現事情やVMのJIT技術の解説は著者鈴木
(WebKitコミッタ/JavaScriptエンジン 「iv」 開発者)
らが,
とくに,
- 注2)
- さらに,
正規表現エンジンの実装技術および正規表現の数学的背景, それぞれの先進的な話題について2名の方にご寄稿いただきました。 「ビットパラレル手法によるマッチング」 喜田拓也氏 (北海道大学) 「正規性の魅力 ――正規言語の 『より高度な数学的背景』」 浦本武雄氏 (京都大学 数理解析研究所)
これまでの正規表現の書籍では扱われていない話題となっています。
記事中で紹介した書籍
-
正規表現技術入門 ――最新エンジン実装と理論的背景
最先端の正規表現技術にスポットを当てた,初学者向け技術解説書。プログラマにとって欠かせないツールである正規表現。便利な正規表現の実力を発揮させるには,動作原...
この記事に関連する書籍
-
日本語入力を支える技術 ―変わり続けるコンピュータと言葉の世界
コンピュータと人を結ぶ窓口である入力プログラム(IME)は一見シンプルですが,その言語,特に日本語の扱いにはソフトウェアレベルの数多くの工夫が詰まっています。本...
-
コンピュータアーキテクチャ技術入門 ――高速化の追求×消費電力の壁
わずか70年余りで,150億倍もの演算速度向上を遂げたプロセッサ, 40年余りで記憶容量が800万倍に増加したメインメモリ, 55年余りで記憶密度が3億倍に達したストレー...
-
プログラマのための文字コード技術入門
より深く知り,すぐ試し,上手に実装したい。プロの道を進む方々にお届けしたい「ベーシック」,WEB+DB PRESS plusシリーズ「技術入門」の第1弾です。 コンピュータ...