#4558

形式的収束表現


さっきまでこのブログのヘッダーに仕込んであるスクリプトを修正するために
正規表現構文マニュアルと取っ組み合いをしていました。
以前、このブログをモバイル端末から見たときに任意改行を取っ払うようにしたのですが、
それは実装としてはもともとある改行をユーザーのwebブラウザまで読み込んだところで
JavaScriptで置換するというややゴリ押し気味な方法をとっています。
要するに元々の文章自体はいじっていないと。まぁそれも現実的ではないですからね。

しかしそれだと、本文内で箇条書きのために改行した部分まで詰まってしまって
記事によっては非常に読みにくくなるらしいということに気付いたので、
今日はその対策のために正規表現で例外パターンを作成したというわけです。
昔からちゃんと箇条書き用のリストタグを使っていればこんな手間も無かったんですけどね。

それにしても正規表現は安易なはずのものでも毎度何故か苦戦させられていて、
そのたびごとにいつも「ちゃんと勉強しないとなぁ」とか思っている割には
実行に移していないのが恥ずかしいところではあります。
正規表現とは、あるいくつかの文字列をひとつの文字列で表現するための規則で、
文字列のグループ化、繰り返し回数の指定といった機能を持つ特殊文字をいろいろ組み合わせて
実にさまざまなパターンを作成することができます。
「.(ピリオド:改行以外の任意の1文字)」と「*(アスタリスク:直前の文字の0回以上の繰り返し)」
を合わせるとすべての行とマッチする、といった感じ。
{n}でn回の繰り返し、(A|B)でAかBのどちらか、[A-z]で半角アルファベットのいずれか、
といった単純な検索クエリだけなら理解できるのですが、
置換結果のある単語AとBの順番を入れ替える($n)、あるパターンを任意の場所で再検索する(x)、
といった高度なものが絡んできたり、
検索パターン自体に別の言語が入ったりするともうバックスラッシュだらけで何がなにやら。
まぁ実用性抜きで考えれば、いろいろな文字列の組み合わせをいかにマッチさせるか、
を考えるのはとてもパズル的で楽しいんですけどね。
ただ、パズル的であるが故に、
「できそうでできない」溝にハマってしまったときのフラストレーションもなかなかのもの。
自分はまだ未熟なのでやっていませんが、正規表現のパズル的要素に着目したクロスワード、
Regex Crossword』なるサイトもあるそうで、自信のある方は遊んでみてはいかがでしょうか。

自分が初めてこの構文と出会ったのは2007年にPerlの勉強をしようとしたときでしたが、
当時は勉強している自分に酔っているだけでPerlで具体的に何を組みたいと思っていたわけでもなく、
習得できたとはとても言いがたい状況でした。
本家ブログをWordPressに移転してからPHP、
あるいは.htaccessといったさまざまな方面で正規表現が必要になる場面が出てきて、
そこでようやくちゃんと向き合うことができたような気がします。
あと割と今の会社がきっかけで使うようになった『秀丸エディタ』の影響もあって、
一括置き換えなどのテキスト処理はこれで正規表現を使って片付けるようにもなりました。
そういうわけでここ一年で急激に使用頻度は高まっているようには感じています。
当然、勉強して損はないだろうという確信はあるのですが……。
「必要に迫られなければ出来ない」のが自分だと最近薄々分かってきてしまったので、
「必要だろうから」という言い訳程度の気持ちでは動機不十分なんでしょうね。
「面白そう」というだけで勉強できていた頃の自分は
いったいどこからエネルギーを取り出していたんだろうとつくづく。
そういう気持ちがしんでしまったわけではなく、
昨今繰り返し述べているように「面白そうなこと」にしても並列に選択肢がありすぎるのが
取り組めない要因なのだろうとは思うのですが……。
じゃあ、今はこれ! と覚悟を決めるにはどうしたらいいんだろうなぁ。

……と話がだんだんいつもの感じにズレてきたので今日はここまで。