偶然に 掴んだ糸が 大当たり2008年10月06日 19時41分41秒

今日は仕事の方でトラブるが発生してくれたおかげで退社時間が大きく遅れてしまった。
最後の最後になって上手くできる方法が見つかったのだけど、それを見つけたのは完全無欠の偶然で失敗しない理由を理解できていない。

詰まっていたのは正規表現という検索条件の特殊な記述方法を用いて、文字列の置き換えを行う部分だ。
置き換えの対象となるテキストが 1行に 1つしかない場合は良いのだけど、幾つか存在していると何故か複数を大きな固まりと扱ってしまう。
例えば、 <と >で挟まれた文を Aで置き換えたいのだが「<1:-<2>/<3>」というテキストに実行すると「A-A/A」になってほしいのに「A」となってしまった。
どうやら「<1:-<2>/<3>」の全体を最初の <と最後の >で挟まれた文と認識してしまったらしい。

これの不具合を直そうとして、色々な方法を探したのだけど上手く行かなくて泡を吹きそうになっていた。
ところがとあるキッカケで正否表現で「何でもよい文字列」を意味する記述が別にもある事を思い出して、気紛れに試してみると理想の動きをしたから驚いた。
具体的な記述だと「<1:-<2>/<3>」に対して
対象を「<(.*)>」と正規表現と「A」となってしまい、
これを「<(.+?)>」に変更すると「A-A/A」となる。

先に述べたとおり「.*」も「.+?」も何でもよい文字列という意味を持つことは同じで、言葉の解釈ならどちらも同じ結果となるはずだった。
しかし、実際にやってみると全く違う結果で出てくるのだから目の当たりにした瞬間は驚愕と呼ぶべきか唖然と言うべきか困ってしまう複雑な感情が湧いてきた。
どうして良いのか分からないのでとりあえず笑ってみたけど 2文字を書き換えただけで直る不具合に数時間も苦しんでいたのかと思うと悲しくなってきた。

結果を見た後で推測すれば、何となく原因は分かったけれど、この場に詳細な説明を書いても「難しいから読み飛ばした」と言われるだけなので割愛しよう。
というか、今の妙な興奮状態では上手く説明する自信がないので手を出したくないというのが本音だったりする。

何にしても崖っぷちから這い上がる糸口が見つかって本当に良かった。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
「このブログはどんな空間でしょう?
 ひらがな4文字でお答え下さい。」

コメント:

トラックバック

このエントリのトラックバックURL: http://crimson-harberd.asablo.jp/blog/2008/10/06/3803216/tb