2011年9月23日

[ruby-list:48387] Re: splitの正規表現を改善したい

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

(2011年9月23日 14:38:27), masayoshi takahashi wrote:
>>> str = "{abcabcabcabcabcabcabcabcabcabc" words =
>>> str.split(/(\{(?:[^\}\\]+|\\.)*?\})/, -1) p words
>>>
>>> 正規表現の書き方がよくないと思うのですが、どう書くと効率的に 実行できるのでしょうか。

>>
>> +や*のネストはマッチに失敗したときに大量のトラックバックを発生さ せます。この場合は+をなくせばいいはずです。
>
> おおお、確かに+が不要でした! 修正したところ、これで問題なさそうです。どうもありがとうございました。

ちょっと今手元に「詳説 正規表現」がないので理屈がいえないのですが(つ
まり身についてない)、エスケープ時のパターンとしては

/\{(?:[^\}\\]+(?:\\.[^\}\\]*)*)\}/

だったはずです。

pat = [^区切り文字\\]

として、

pat+(\\.pat*)*区切り文字

最初のpat+で食えるだけ食っとくとお得、というのは変わりませんが。

みんながハマる、そして覚えると便利なイディオムなので、なんか専用メソッ
ドにしたほうがいいんだろうなあと思いつつ。
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)

iQEcBAEBAgAGBQJOfCj/AAoJEC7N6P3yLbI2+SoIAK91ZLVwxdDFL9lEc8vwuu73
JPZ/zHWOByDptNuCOsx0H+zUnSxvK3hd/VcVs6GvTA/LllxQ1F3scrYukn3+bDub
Ztt2XvwScSxiY2OjAHQocdRCGm3KehkYFMi4pzIdgEAr33hx1iqJ0uTxptivWJUk
4NMN5GHh8as1yx2sZS+FFuzdWYc0P86V9ZOd1xnro4Ahotsn4jkDPvnQxnIfzaO4
hQEo+StR5oFLoAM7rkf7jOFTE71AzIcve+M4hT4axkr/QNx6KpOWUTi4iJvd0Jz6
V497Y+EVImhhLHjXWM+V/sTMBCafMd9eB06vhqZsDfLSrLW0QXXwUsVKXftfRQ0=
=fLIP
-----END PGP SIGNATURE-----


投稿者 xml-rpc : 2011年9月23日 15:37
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/106456
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。