正規表現 Part9
■ このスレッドは過去ログ倉庫に格納されています
0705デフォルトの名無しさん
2012/03/25(日) 14:02:53.15ありがとうございます。
10進と16進で処理を変えたいのは、マッチした部分をキーにしてディクショナリから置換後の文字列(というか文字)を取り出すさい、
16進のキーはディクショナリに用意していないので、いったん10進文字列に変換してから同じようにディクショナリにアクセスさせたいためです。(変換メソッドは10進か16進か自動判別してくれないのでここで処理を分ける他ありません。)
$の使い方についてなのですが、キャプチャされた部分を取り出して$表記を用いた別の文字列(template)にキャプチャした部分を埋め込めるというのは分かるのですが
別の文字列のある部分を$〜に置換するのではなくて、$でキャプチャした元の文字列自体を置換したいので、今回使えるかどうかはよくわかりませんでした
いろいろやってみたところrangeがぶっ飛んだ値になるのは、()を|などで分けて2つ以上設定した際に、マッチしなかった()について対応するインデックスのrangeのlocationがNSIntegerの最大値に設定されてしまうらしく
その値で分岐して、locationがNSIntegerMAXではないほうをキーとして取り出し置換することでとりあえず上手くいきました。
■ このスレッドは過去ログ倉庫に格納されています