Text.Regex.PCRE を使用して正常に機能する正規表現があります。
[[_,_id,_name]] = "199mercury" =~ "(\\d+)(\\w+) :: [[String]]
ただし、{-# LANGUAGE OverloadedStrings #-} を追加して aeson (json ライブラリ) を使用し、=~: でインスタンス エラーを取得しました。
<interactive>:33:14:
No instances for (RegexMaker Regex CompOption ExecOption source0,
RegexContext Regex source10 target0)
arising from a use of `=~'
Possible fix:
add instance declarations for
(RegexMaker Regex CompOption ExecOption source0,
RegexContext Regex source10 target0)
In the expression: "199mercury" =~ "(\\d+(\\w+)"
In an equation for `it': it = "199mercury" =~ "(\\d+(\\w+)"
修正を検索すると、正規表現を次のように変更するようです。
getAllTextSubmatches ("199mercury" =~ "(\\d+(\\w+)" :: AllTextSubmatches [] String)
しかし、それは私に別のインスタンスエラーを与えるだけのようです:
No instances for (RegexMaker Regex CompOption ExecOption source0,
RegexContext Regex source10 (AllTextSubmatches [] String))
ここに入れるのに適したタイプは何ですか? 私が試したことは何もうまくいかないようです。OverloadedStrings が問題のようですが、aeson で Data.Text.pack を使用する以外に解決策が見つかりません。これは機能しますが、正規表現で何が間違っているのかを理解したいと思います。Text.Regex が OverloadedStrings で機能しない問題であるかどうかは興味がありますが、その証拠は見つかりません。