1.8.7には、鬼車(コンパイルされる可能性があります)なしではネガティブな後読みはありません。
1.9.3; わーい:
> s = "a;b;c\\;d"
=> "a;b;c\\;d"
> s.split /(?<!\\);/
=> ["a", "b", "c\\;d"]
1.8.7 with Onigurumaは簡単な分割を提供しませんが、マッチオフセットを取得し、その方法でサブストリングを引き離すことができます。私は覚えていないこれを行うためのより良い方法があると思います:
> require 'oniguruma'
> re = Oniguruma::ORegexp.new "(?<!\\\\);"
> s = "hello;there\\;nope;yestho"
> re.match_all s
=> [#<MatchData ";">, #<MatchData ";">]
> mds = re.match_all s
=> [#<MatchData ";">, #<MatchData ";">]
> mds.collect {|md| md.offset}
=> [[5, 6], [17, 18]]
その他のオプションは次のとおりです。
- 結果を分割し
;
て後処理し、末尾を探す\\
、または
- 文字ごとのループを実行し、いくつかの単純な状態を維持して、手動で分割します。