#:g1: irregexの紹介

Posted 2014-03-04 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の64日目です。

irregexとはなにか

 irregexは、Alex Shinn氏作のR[456]RSをターゲットとしたポータブルな正規表現のライブラリです。

パッケージ情報

パッケージ名irregex
プロジェクトサイトIrRegular Expressions

インストール方法

プロジェクトサイトからダウンロードしてきて適当に導入します。Chickenだと標準で付属してくるので (use irregex) のみでOK。
Gauche、Guileでは専用のファイルがあるので、それを読み込めばOK。
R6RSでは、

$ make irregex-r6rs.scm

することで irregex-r6rs.scm が生成されるので、それを読み込めばOKです。

試してみる

 良く使われる正規表現のユーティリティは大体揃ってます。

(irregex-search '(w/nocase "foobar") "abcFOOBARdef")
;=> #<match>

(irregex-replace "n" "banana" "k")
;=> "bakana"

(irregex-replace/all "[aeiou]" "hello world" "*")
;=> "h*ll* w*rld"

(irregex-split "a" "banana")
;=> ("b" "n" "n")

詳しくはプロジェクトサイトに丁寧な説明があります。

 irregexの特徴的なところとしては、文字列での正規表現だけでなく、sreと呼ばれるS式での正規表現を扱えることです。
sreの書式が思い出せなくなっても string->sre というものが用意されていて、これで変換できるので便利だったりします。

(string->sre "[aeiou]")
;=> (/ #\u #\u #\o #\o #\i #\i #\e #\e #\a #\a)

(irregex-replace/all '(/ #\u #\u #\o #\o #\i #\i #\e #\e #\a #\a)
                     "hello world" "*")
;=> "h*ll* w*rld"

まとめ

 今回は、irregexを紹介してみました。
現在SRFI 115で正規表現が提案されていますが、作者も同じくAlex Shinn氏でirregexの流れを汲むもののようです。

SRFI 115がファイナルになれば、irregex方式が主流になっていくのかもしれないですね。

comments powered by Disqus