もしあなたが新年に学ぶものを探しているなら、正規表現は悪くない。あらゆる主要なプラットフォームには方言が存在するが、あなたのキャリアを通してずっと役に立つスキルである。開始する一つの方法は、Firas Dib氏のRegular Expressions 101である。
通常のクイズの他に、RegEx 101は正規表現の説明を行うのが特徴である。標準の正規表現を分解して、各コンポーネントがどう動くのかを示している。このような説明は初心者ばかりでなく、レバシーコード中にある正規表現を理解しょうとしている経験のある開発者にも役に立つだろう。
InfoQ. regex101.comを作った動機は何ですか?
Firas Dib: 私は長年、IRC向けのボットを持っていて、そこにユーザーが送ってきた正規表現を説明してました。そんなに前のことではなく、 regex101を作成する前に、私はこのボットでクイズも提供してました。最初は非常に楽しかったのですが、次第に手に余るようになってきて、これがmIRCの自作のスクリプト言語で全て書かれており、この状況を管理するのが難しくなりました。しかし、これが唯一の制限ではありませんでした。全てのコミュニケーションがIRC(テキストのみ)をベースにしてたので、それを直感的にするのが難しく、人々をあまり惹きつけることができませんでした。ボットの説明部分は非常に喜ばれましたが、かなり悩ましいものでした。情報を細切れにしてチャネルに流すからです。これが考えるきっかけになりました。現在直面しているこれらの制限を取り除いて、このサービスを提供するもっと良い方法はなんだろうと?もちろんwebサイトです。私の冴えないmIRCコードを少々はマシなPHPコードに変換し始めた時がサイトの始まりです。
InfoQ. このサイトをどのくらい続けているのですか?
昨年の夏の始め頃にwebサイトを始めました。
私もまた言いたいのは、webサイトがrubularと多くの類似点があることを私がよく知っていることです。これは最初サイトをデザインする時の私の意図ではありません。しかしデザインが rubularに似たものに徐々に収斂して行きました(なぜならそれは非常に明白ですが、良いレイアウトです)。結局、私はクイックリファレンスや彼のwebサイトから他にも小さなものを使うことになりました。しかし私は彼に連絡を取り、状況を説明しました。もし問題があるのなら、彼は単に私にメールして、私はそれに対応することになります。私はまた、ここで述べたことをwebサイトのクレジットに追加しています。私がこのことを言うのは、人々に私が盗作しているとかその手のことをやっていると思われたくないからです。webサイトにあるすべてのコードは私自身のものであり、それを作るのに多くの時間を費やしました(クイックリファレンスを別にして)。
InfoQ. 正規表現は「ライトオンリー」言語だ、と言われてきました。すなわち、一度書かれると、普通はほとんどのプログラマにとって、理解するのが難しいです。このことについてあなたの意見を聞かせてください。
恐らくその言葉は非常に正しく、またそれが私がこのサービスを作った理由の一部でもあります。人々はIRCに加わり、ボットに正規表現の説明を頼み、それで去りました。恐らく一時間後に戻ってきて同じ事をします。今は、webサイトで、タブを開けたままにするか、自分の正規表現に永久リンクを作れます。そればかりでなく、自分のテストケースにwebサイトを使い、リファレンスとして自動化された説明を使うことができるので、同僚に見せることや自分のコード中のコメントに使うことさえできます。こうして、正規表現が「ライトオンリー」である問題をある種取り除く、ないし少なくとも解決の助けになります。
InfoQ. 私はあなたが言うボットを知りません。それについてちょっと話してくれませんか?
ボットは単なるmIRCクライアントの1つで、私の友達が彼のサーバーで走らせていました。実際目新しいものは何もありません。始めに mIRCをまだ使った理由は、私がこのクライアントを非常に良く知っていたのと、もっと若い時にそれを使って、たくさんのスクリプトを書いていたからです。
InfoQ. どうやって説明部分を書いたのですか?
説明部分は実際に、正規表現を使って正規表現を分解しています(始まり!)。エー、正規表現だけでなく、至るところで使います。妙に聞こえるかもしれませんが、 PCREは非常にすごいライブラリで、とりわけ再帰をサポートしています。入力を非常に正確にパースできます。しかしこれを実装するために、私はPCREマニュアルを何度も読み通さなければなりませんでした。これは面白くない仕事です。その時でも私のサービスは完全にはPCRE互換ではありませんでした。私が単に実装しないことに決めたものが少々ありますが、実際上誰も使っていないからです。
InfoQ. サイトは正規表現のPHPバージョンを念頭において書かれています。他の実装(.NET, Javaなど)を使っている人たちが知っておくべき特別なことがありますか?
そうです。PHPで書かれています。PHPは(非常に強力な)PCREライブラリを使っています。このライブラリは多くの他のライブラリがサポートしていないものを多く持っています。例えば、再帰、ルックアラウンド、条件付きステートメントです。人々は正規表現に関して、自分の使っている言語の限界を知る必要があります。しかし私はエスケープみたいなもっと簡単な課題でユーザーを助けよう思っています。例えば、Javaでは、バックスラッシュをエスケープしなければなりません。 \w は \\wとタイプしなければなりません。今日現在、多くのユーザーがこのフィーチャを要望しています。もちろん私はそれを検討します。