F#/。net中的Regex / CTFG

| 我想知道如何在F#中执行正则表达式或上下文无关的语法。 我有一些F#的经验, (我从未见过/使用过主动模式,(由于时间限制,它被明确排除在课程之外) 并且我已经从python中完成了小巧的正则表达式,以及从离散数学的角度来看了正则表达式和语法。 我有点环顾四周,已经有点困惑了。 我不太清楚正则表达式的MSDN文档。 我有点失望地发现
match str with
|a + \".\" + b + \".\" + c -> Some(a,b,c)
|[] -> None
没用。 我怀疑通过主动模式可以达到这样的效果 编辑以澄清: 我想知道如何做正则表达式或上下文无关的语法     
已邀请:
           MSDN   正则表达式的文档不清楚   对我我。 对于字符串是否与正则表达式匹配的简单情况,再简单不过了:
open System.Text.RegularExpressions
let r = Regex(\"^a*$\")
r.IsMatch(\"a\")
> val it : bool = true
r.IsMatch(\"b\")
> val it : bool = false
用所需的正则表达式替换
a*
。请注意,要完全匹配,需要在正则表达式周围加
^
$
。   我有点失望   这是行不通的。
match str with
| a + \".\" + b + \".\" + c -> Some(a,b,c)
| [] -> None
F#模式用于匹配和绑定嵌套的树状数据结构(代数数据类型)的某些部分,而不是字符串和常规语言,因此这是行不通的。   我怀疑这样的效果会   通过主动模式实现 是的,您可以使用主动模式在实现此效果方面大有帮助。克里斯·史密斯(Chris Smith)有一篇文章显示了详细信息(由Brian首次发布)。 http://blogs.msdn.com/b/chrsmith/archive/2008/02/22/regular-expressions-via-active-patterns.aspx   我想知道   如何做正则表达式或上下文无关   语法师或两者   ... 我弄完了   python中的alittle正则表达式   正则表达式和语法   数学的观点。 为了匹配字符串上的模式,上面显示的内置.Net正则表达式通常足够好。但是,请注意,尽管有名称,但它们并不是严格的常规规则,因为它们可以代表更大的一类语言。结果,如果您在理论上迷惑了它们,它们可能并不总是具有您可能期望的时间/空间复杂性。 (对于Perl / Python / etc也是如此) 对于CFG,这是一个完全不同的问题。来自F#PowerPack的Fsyacc(以及lexer fslex)是标准的F#LALR解析器生成器,它将与CFG的有用子类匹配。或者,您可以尝试从http://www.quanttec.com/fparsec/访问FParsec解析器组合器库。     
        我建议专家F#摘录: 使用正则表达式和格式 它涵盖了很多基础-使用perl样式运算符,使用f#模式匹配,活动模式等。     
        这个家伙写了一个关于如何在F#中构建完整的正则表达式解析器的教程: http://stevehorsfield.wordpress.com/2009/08/04/f-a-complete-regular-expression-processor/ http://stevehorsfield.wordpress.com/2009/07/25/f-building-a-regular-expression-pattern-parser/     
        这是您要找的东西吗? http://blogs.msdn.com/b/chrsmith/archive/2008/02/22/regular-expressions-via-active-patterns.aspx     
        在阅读ML的《现代编译器实现》的前几章之前,我从未真正理解过正则表达式:虽然该主题上的典型编程资源更倾向于使用正则表达式的实践,但本书的作者奠定了正则表达式背后的数学基础。主题(至少对我而言,这对于我理解任何复杂的主题以及大型编程社区中大多数常规方法都缺少的东西总是至关重要的)。 作为日常实用参考,该站点非常有用。 至于.NET框架的Regex API,它功能强大,但使用起来有些野兽和尴尬,因为自.NET 1.1以来,它没有进行太多更新(没有泛型,并且在继承层次结构上有些过高)。我认为您只需要稍微试用一下就可以了(F#Interactive非常适合这种实验)。     

要回复问题请先登录注册