« 花冷え | トップページ | フラクチャー »

正規表現についてひとつ覚えた

 図書生成をしていたら、なにやら無限ループにはいってしまったようなので、いったい何が起きたのだろうと調べていたら、とあるインラインタグを XML タグに変換するところでループしているようだった。それまではそんなことはなかったのでどうしたのかと思いつつ調べていって、そういえばと正規表現のあたりを調べて納得した。パターンが誤認されているのだった。

 @<abc>{hoge}

 みたいな記法を使っていて(ReVIEWライクなので)、これにマッチしたら特定の XML タグに置換するようにしていたのだけれど、

 /@<abc>{hoge}/ =~

 といった感じで調べて str.sub! していたのだった。ところが、問題が起きたのは、hoge 部分が半角数字だけのもので、これだと {m,n} という正規表現の繰り返しを示すメタ文字に合致してしまうのだった。そのため、該当する文字列が含まれている間ループさせていたので、いつまでたっても置換されずに無限ループにはまっていたと。

 ということで、\{ \} とすることで対処してようやく事なきを得たと。メタ文字についてひとつ覚えました。(きっとまた忘れてしまうだろうけれど)


追記:05/15

 [ quotemeta::ときどきの雑記帖 2012 ]

 Regexp.quote なんてものがあったのですね! 覚えているうちにさっそく使っておこう。

 [ Regexp - Rubyリファレンスマニュアル ]

|

« 花冷え | トップページ | フラクチャー »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: 正規表現についてひとつ覚えた:

« 花冷え | トップページ | フラクチャー »