如何合并Regex?

Gav*_*vin 1 regex haskell

背景

我想在Regex这里有几个.

import Text.Regex

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

问题

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

我该如何合并它们?具体来说,一个Regex -> Regex -> Regex功能.或者,转换Regex回来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
Run Code Online (Sandbox Code Playgroud)

pha*_*dej 8

Regextype中的Text.RegexC实际上是一个C指针:

data Regex = Regex (ForeignPtr CRegex) CompOption ExecOption
Run Code Online (Sandbox Code Playgroud)

AFAIK在编译之后无法恢复posix正则表达式的字符串表示.regcomp 3手册页.

如果您想以代数方式操作正则表达式,请在您自己的类型中进行换行以推迟编译或使用例如regex-applicative.