使用正则表达式捕获组名

时间:2019-04-15 09:33:04

标签: haskell

我正在尝试使用regex软件包(与TDFA一起使用),我可以找到的有关命名捕获组的唯一参考是准引号(cp),没有任何解释。 基本上,我在配置文件中有正则表达式,并在运行时使用compileRegex对其进行编译,并应用于行,并且我希望从中提取几个特定的​​捕获组,并使用在编译时知道的名称。

所以我正在寻找一个函数,该函数将使用Matches a,一个字符串(捕获组名称)并返回一个Maybe a,具体取决于捕获组是否匹配或匹配。不是吗甚至只是从Match a中提取捕获组名称的一种方式,就足够了。

文档中提到了准引号cp,但没有解释应如何使用它,如果知道,我甚至不确定是否可以使用,因为我是在运行时编译正则表达式的。

有人会举带有命名捕获组的示例吗? 谢谢

1 个答案:

答案 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)"