日本語を含む文字列から正規表現を使って抽出する方法
日本語を含む文字列から正規表現を使って抽出をしたいのですが、上手くいかなくて困っています。
ライブラリはregex-pcreを使っています。
Stringではマッチする部分がずれるのか、マッチの結果の2つ目に何も入っていません。
ByteStringではマッチする部分は取れているようなのですが、日本語のデータが抜け落ちてしまいます。
import Text.Regex.PCRE
"123あいうえお456かきくけこ" =~ "(\\d+)(\\D+)" :: [[String]]
--[["123\12354\12356\12358\12360\12362\&456\12363\12365\12367\12369\12371","123","\12354\12356\12358\12360\12362\&456\12363\12365\12367\12369\12371"],["","",""]]
import Data.ByteString.Lazy.Char8 as B
B.pack "123あいうえお456かきくけこ" =~ "(\\d+)(\\D+)" :: [[B.ByteString]]
-- [["123BDFHJ","123","BDFHJ"],["456KMOQS","456","KMOQS"]]
また、compUTF8というオプションがあったので試してみたのですが
let reg = makeRegexOpts compUTF8 defaultExecOpt "(\\d+)(\\D+)"
matchAllText reg "123あいうえお456かきくけこ"
-- [array (0,2) [(0,("123\12354\12356\12358\12360\12362\&456\12363\12365\12367\12369\12371",(0,18))),(1,("123",(0,3))),(2,("\12354\12356\12358\12360\12362\&456\12363\12365\12367\12369\12371",(3,15)))],array (0,2) [(0,("",(18,18))),(1,("",(18,3))),(2,("",(21,15)))]]
となり、同様の結果のようです。
環境はUbuntu14.04($LANG=ja_JP.UTF-8)、stack0.1.5.0(ghc-7.10.2、lts-3.6)です
どうにかして日本語を含むStringかByteStringから正しくマッチさせて抽出することはできないでしょうか?
よろしくお願いします。