2019 年的 Yesod 正则表达式
Yesod Regular Expressions in 2019
Yesod 经常使用 Text
。
我希望使用任何支持 UTF8 和 Text
的正则表达式库。
最推荐的两个库好像是:
正则表达式-tdfa 尝试:
import Text.Regex.TDFA
...
let (parta,partb,partc) = ((sometext :: Text) =~ ("de" :: String)) :: (String, String, String)
我似乎无法使用 Text
,尽管 regex-tdfa
似乎有一些用于 Text
的模块
http://hackage.haskell.org/package/regex-tdfa-1.3.1.0/docs/Text-Regex-TDFA-Text.html
stack 在此处安装的 regex-tdfa 版本是 regex-tdfa-1.2.3.1,出于某种原因,它不会使用具有上述 Text.Regex.TDFA.Text 的较新版本。当我尝试在 package.yaml 中指定版本 - regex-tdfa >=1.3.1
时,使用 "yesod devel":
构建时出现此错误
In the dependencies for example-0.0.0(+dev +library-only):
regex-tdfa-1.2.3.1 from stack configuration does not match >=1.3.1
needed since backend is a build target.
现有 SO 问题:此问题的答案已过时,regex-tdfa-text 已弃用:
如何使用支持 Text
的 regex-tdfa 版本?
使用 PCRE 的尝试:
import Text.Regex.PCRE
...
let stringResult = ( "hello there" :: Text ) =~ ( "e" :: Text ) :: AllTextMatches [] Text
这不起作用,除非我用 String
替换所有 Text
。
错误是:
• No instance for (RegexMaker Regex CompOption ExecOption Text)
arising from a use of ‘=~’
• In the expression:
("hello there" :: Text) =~ ("e" :: Text) :: AllTextMatches [] Text
本教程声称 PCRE 适用于 UTF8:https://gabebw.com/blog/2015/10/11/regular-expressions-in-haskell
但我不确定 regex-pcre 是否声称可以与 Text
一起使用。我应该从 Text
转换为 String
然后使用 regex-pcre 吗?
总结:
在 Yesod 中使用正则表达式的最佳做法是什么?如何使用带有 Text
和 UTF8 的库?
在有关依赖项的错误消息之后,您应该会看到显示以下文本:
Some different approaches to resolving this:
* Set 'allow-newer: true' in /u/buhr/.stack/config.yaml to ignore all version
constraints and build anyway.
* Recommended action: try adding the following to your extra-deps
.../yesodtest/stack.yaml:
- regex-tdfa-1.3.1.0@sha256:c77808a0d68d275c75fb84dc9ced340536574...
extra-deps
解决方案是首选方案。在您的项目特定 stack.yaml
中,添加:
extra-deps:
- regex-tdfa-1.3.1.0
(实际上并不需要详细的 SHA256。)这会引发另一个错误,因为 regex-base
太旧了,因此您还需要按照建议的操作添加它:
extra-deps:
- regex-tdfa-1.3.1.0
- regex-base-0.94.0.0
这足以让我使用 resolver: lts-14.17
构建 yesod/simple
模板。
Yesod 经常使用 Text
。
我希望使用任何支持 UTF8 和 Text
的正则表达式库。
最推荐的两个库好像是:
正则表达式-tdfa 尝试:
import Text.Regex.TDFA
...
let (parta,partb,partc) = ((sometext :: Text) =~ ("de" :: String)) :: (String, String, String)
我似乎无法使用 Text
,尽管 regex-tdfa
似乎有一些用于 Text
的模块
http://hackage.haskell.org/package/regex-tdfa-1.3.1.0/docs/Text-Regex-TDFA-Text.html
stack 在此处安装的 regex-tdfa 版本是 regex-tdfa-1.2.3.1,出于某种原因,它不会使用具有上述 Text.Regex.TDFA.Text 的较新版本。当我尝试在 package.yaml 中指定版本 - regex-tdfa >=1.3.1
时,使用 "yesod devel":
In the dependencies for example-0.0.0(+dev +library-only):
regex-tdfa-1.2.3.1 from stack configuration does not match >=1.3.1
needed since backend is a build target.
现有 SO 问题:此问题的答案已过时,regex-tdfa-text 已弃用:
如何使用支持 Text
的 regex-tdfa 版本?
使用 PCRE 的尝试:
import Text.Regex.PCRE
...
let stringResult = ( "hello there" :: Text ) =~ ( "e" :: Text ) :: AllTextMatches [] Text
这不起作用,除非我用 String
替换所有 Text
。
错误是:
• No instance for (RegexMaker Regex CompOption ExecOption Text)
arising from a use of ‘=~’
• In the expression:
("hello there" :: Text) =~ ("e" :: Text) :: AllTextMatches [] Text
本教程声称 PCRE 适用于 UTF8:https://gabebw.com/blog/2015/10/11/regular-expressions-in-haskell
但我不确定 regex-pcre 是否声称可以与 Text
一起使用。我应该从 Text
转换为 String
然后使用 regex-pcre 吗?
总结:
在 Yesod 中使用正则表达式的最佳做法是什么?如何使用带有 Text
和 UTF8 的库?
在有关依赖项的错误消息之后,您应该会看到显示以下文本:
Some different approaches to resolving this:
* Set 'allow-newer: true' in /u/buhr/.stack/config.yaml to ignore all version
constraints and build anyway.
* Recommended action: try adding the following to your extra-deps
.../yesodtest/stack.yaml:
- regex-tdfa-1.3.1.0@sha256:c77808a0d68d275c75fb84dc9ced340536574...
extra-deps
解决方案是首选方案。在您的项目特定 stack.yaml
中,添加:
extra-deps:
- regex-tdfa-1.3.1.0
(实际上并不需要详细的 SHA256。)这会引发另一个错误,因为 regex-base
太旧了,因此您还需要按照建议的操作添加它:
extra-deps:
- regex-tdfa-1.3.1.0
- regex-base-0.94.0.0
这足以让我使用 resolver: lts-14.17
构建 yesod/simple
模板。