我正在尝试使用regex软件包(与TDFA一起使用),我可以找到的有关命名捕获组的唯一参考是准引号(cp),没有任何解释。 基本上,我在配置文件中有正则表达式,并在运行时使用compileRegex对其进行编译,并应用于行,并且我希望从中提取几个特定的捕获组,并使用在编译时知道的名称。
所以我正在寻找一个函数,该函数将使用Matches a
,一个字符串(捕获组名称)并返回一个Maybe a
,具体取决于捕获组是否匹配或匹配。不是吗甚至只是从Match a
中提取捕获组名称的一种方式,就足够了。
文档中提到了准引号cp,但没有解释应如何使用它,如果知道,我甚至不确定是否可以使用,因为我是在运行时编译正则表达式的。
有人会举带有命名捕获组的示例吗? 谢谢
答案 0 :(得分:1)
您将在Text.RE.Replace文档中找到所需的API;我认为您要查找的是名称以capture
开头的函数之一。这是一个示例:
module Main where
import Data.Text
import Text.RE.Replace
import Text.RE.TDFA.String
needle :: CaptureID
needle = IsCaptureName . CaptureName . pack $ "needle"
main :: IO ()
main = do
re <- compileRegex "-${needle}([a-z]+)-"
let match = "haystack contains the -word- you want" ?=~ re
if matched match
then print $ captureText needle match
else print "(no match)"