Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Haskell:正则表达式和数据.Text_Regex_Haskell_Text - Fatal编程技术网

Regex Haskell:正则表达式和数据.Text

Regex Haskell:正则表达式和数据.Text,regex,haskell,text,Regex,Haskell,Text,处理大量文本数据时,建议使用data.Text而不是Haskell的本机字符串。检查完毕。但是正则表达式呢?是否有专门针对数据的正则表达式库。Text?据我所见,所有正则表达式库都在处理Haskell原生字符串或更糟糕的CString。我对Haskell一无所知,但无论使用何种编程语言,阅读始终是一个好主意 使用扩展且非常丰富的函数族来处理 Unicode文本(包括规范化、正则表达式、, 非标准编码、文本中断和区域设置),请参阅文本 包装: 更准确地说,正则表达式生态系统和Haskell Reg

处理大量文本数据时,建议使用
data.Text
而不是Haskell的本机字符串。检查完毕。但是正则表达式呢?是否有专门针对
数据的正则表达式库。Text
?据我所见,所有正则表达式库都在处理Haskell原生字符串或更糟糕的CString。

我对Haskell一无所知,但无论使用何种编程语言,阅读始终是一个好主意

使用扩展且非常丰富的函数族来处理 Unicode文本(包括规范化、正则表达式、, 非标准编码、文本中断和区域设置),请参阅文本 包装:


更准确地说,正则表达式生态系统和Haskell

Regexes是一种从其他语言迁移过来的工具,人们希望它是该语言中可用的工具之一。在编译语言中,这种功能往往以库的形式出现,如。脚本语言通常在语言中内置正则表达式,但在后台,解释器正在使用这些库中的一个

这是有充分理由的。有限状态自动机相当神秘,实现起来有些繁琐,而且很难提高效率。为什么要重新发明轮子

那么哈斯克尔到底怎么了?好的,这些众所周知的库都在8位字的数组上工作,数组以Haskell命名法中的
NUL
字节--a
CString
终止。Haskell中的常规字符串是。(确切地说:
类型String=[Char]
)。这会导致两个问题:1)字符是单个unicode字符,而不是8位字节。(GHC在内部将字符存储为UTF16)和2)列表不是数组。这意味着,如果我们想在Haskell中使用正则表达式,我们要么需要将文本转换为CStiring,并对PCRE之类的东西进行外部调用,要么实现一个高效的有限状态自动机和

将unicode转换为ascii是一种有损且危险的操作。一些库对它们正在处理的字符串进行一些假设,并为您进行转换,另一些库则让您为它们构建CString,以便您可以确定当一个字符串显示在教程文本中时要做什么


那么关于
Data.Text
呢?它至少是一个数组,但在内部它是一个UTF16数组。仍然可以转换为8位CString,但效率不高。还可以使用支持unicode的正则表达式引擎。具有,并且在包中有一个绑定。Unicode的本质意味着这个包的效率低于PCRE,因此有些人仍然喜欢使用后者的绑定。你必须根据你使用正则表达式的目的来决定你的偏好

请记住,考虑到在Haskell中编写解析器(实际上是几十个包)的方便性,正则表达式在大多数惯用的Haskell代码中实际上并不常见。解析器往往更易读(您命名的产品等),更易于维护,并且不一定慢很多。您尝试过Text.Regex.TDFA吗[?我觉得它足够快,但不知道在您的情况下,什么意味着大量的数据。我也同意@copumpkin解析器,比如Text。Parsec在大多数情况下都更合适。具体请参见文本版本: