正規表現についてひとつ覚えた
図書生成をしていたら、なにやら無限ループにはいってしまったようなので、いったい何が起きたのだろうと調べていたら、とあるインラインタグを XML タグに変換するところでループしているようだった。それまではそんなことはなかったのでどうしたのかと思いつつ調べていって、そういえばと正規表現のあたりを調べて納得した。パターンが誤認されているのだった。
@<abc>{hoge}
みたいな記法を使っていて(ReVIEWライクなので)、これにマッチしたら特定の XML タグに置換するようにしていたのだけれど、
/@<abc>{hoge}/ =~
といった感じで調べて str.sub! していたのだった。ところが、問題が起きたのは、hoge 部分が半角数字だけのもので、これだと {m,n} という正規表現の繰り返しを示すメタ文字に合致してしまうのだった。そのため、該当する文字列が含まれている間ループさせていたので、いつまでたっても置換されずに無限ループにはまっていたと。
ということで、\{ \} とすることで対処してようやく事なきを得たと。メタ文字についてひとつ覚えました。(きっとまた忘れてしまうだろうけれど)
追記:05/15
Regexp.quote なんてものがあったのですね! 覚えているうちにさっそく使っておこう。
| 固定リンク
コメント