这是与Mac/OSX相关的问题!
我有一个由Haskell字符串组成的,长度为三个字符:
"a\160b"
我想匹配和替换中间字符。
有几种方法可以实现:
ghci> :m +Text.Regex
ghci> subRegex (mkRegex "\160") "a\160b" "X"
"*** Exception: user error (Text.Regex.Posix.String died: (ReturnCode 17,"illegal byte sequence"))
ghci> subRegex (mkRegex "\\160") "a\160b" "X"
"a\160b"
没有得到期望的结果。
我需要如何修改正则表达式或我的环境,才能用 'X' 替换 '\160'?
问题似乎源于输入的区域设置/编码。
bash> locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
我已经修改了我的.bashrc文件来导出以下环境变量:
bash> locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
但这并没有改变行为。
Prelude Text.Regex> :m +Text.Regex Prelude Text.Regex> subRegex (mkRegex "\160") "a\160b" "X" "aXb"
- David Powell'\160'
是 
,可能是由于某些奇怪的原因,Regex.Posix(特别是)不喜欢它,例如将其规范化为普通空格。 - barsoap