/var/log/study

つまり雑記

haskellで空文字列を指定するときの方法

タイトルのまんま。

結論

“\NUL"を使うと良い

発覚までの流れ

pcre-heavy: A regexp library on top of pcre-light you can actually use.

上記のライブラリを使って正規表現でマッチさせて置換しようと思った時の話

具体的な実行したいこと

現在の国号「'''グレートブリテン及び北アイルランド連合王国'''」に変更 から ' を取り除き

[[スターリング・ポンド|UKポンド]] (£)UKポンド (£) にしたいとき

抽象的にすると

  • ' を取り除く
  • [ を取り除く
  • ] を取り除く
  • [[$some_word| を取り除く

バグるパターン

gsub [re|('+|\[\[.*\||\[+|\]+)|] (""::String) x

これだと中途半端に動くのがタチの悪いところ

うまくいくパターン

gsub [re|('+|\[\[.*\||\[+|\]+)|] ("\NUL"::String) x

空文字列を指定するときは \NUL を使う必要がある模様. ただしHaskell的には常識的な話なのかもしれない.

どこかのwebサイトで, \NUL を指定しているのを見つけて試したらうまくいったのだが, どこのサイトなのかがわからなくなってしまったのが残念.