如何合并正则表达式?

加文

背景

假设我在Regex这里有几个

import Text.Regex

openTag = mkRegex "<([A-Z][A-Z0-9]*)\\b[^>]*>"
closeTag = mkRegex "</\\1>"
any = mkRegex "(.*?)"

问题

openTag ++ any ++ closeTag <-仅用于说明目的

如何合并它们?具体来说就是一个Regex -> Regex -> Regex功能。或者,将Regexback转换String会很好。

openTag ++ "hello" ++ closeTag <-仅用于说明目的

因此,我可以Regex -> String -> Regex最终创建自己的功能。

解决方法

处理字符串文字。

import Text.Regex

openTag = "<([A-Z][A-Z0-9]*)\\b[^>]*>"
closeTag = "</\\1>"
any = "(.*?)"

tagWithAny = mkRegex $ openTag ++ any ++ closeTag

tagWith :: String -> Regex
tagWith s = mkRegex $ openTag ++ s ++ closeTag
phadej

Regex输入Text.Regex实质上是一个C指针:

data Regex = Regex (ForeignPtr CRegex) CompOption ExecOption

AFAIK在编译后无法恢复posix regex的字符串表示形式。regcomp 3手册页

如果您想对代数进行正则表达式运算,则将其包装在您自己的类型中以推迟编译或使用regex-applicative

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章