F#/.net 中的正则表达式/CTFG

标签 regex f# context-free-grammar

我想知道如何在 F# 中执行正则表达式或上下文无关语法。

我有一些使用 F# 的经验, (我从未见过/使用过主动模式,(它被明确排除在我为时间限制而做的类(class)之外)) 我用 python 做了一些正则表达式,还从离散数学的角度做了正则表达式和语法。

我环顾四周,我有点困惑。 正则表达式的 MSDN 文档对我来说不太清楚。

发现这一点我有点失望

match str with
|a + "." + b + "." + c -> Some(a,b,c)
|[] -> None

没用。

我怀疑这样的效果可以通过事件模式来实现

编辑以澄清: 我想知道如何执行正则表达式或上下文无关语法或两者兼而有之

最佳答案

The MSDN documentation for regex isn't so clear to me me.

对于字符串是否与正则表达式匹配的简单情况,再简单不过了:

open System.Text.RegularExpressions
let r = Regex("^a*$")
r.IsMatch("a")
> val it : bool = true
r.IsMatch("b")
> val it : bool = false

a* 替换为所需的正则表达式。请注意,正则表达式周围需要 ^$ 才能完全匹配。

I was a little disapointed to find that this didn't work.

match str with
| a + "." + b + "." + c -> Some(a,b,c)
| [] -> None

F# 模式用于匹配和绑定(bind)嵌套树状数据结构(代数数据类型)的部分,而不是字符串和常规语言,这就是它不起作用的原因。

I suspect that an effect like this can be achieved with active patterns

是的,使用事件模式可以在很大程度上实现这种效果。 Chris Smith 有一篇文章显示了详细信息(由 Brian 首次发布)。

http://blogs.msdn.com/b/chrsmith/archive/2008/02/22/regular-expressions-via-active-patterns.aspx

I would like to know how to do regex Or Context Free Grammers Or both ... I've done alittle regex in python, and also regex and grammers from a descrete mathematics point of view.

对于匹配字符串上的模式,如上所示的内置 .Net 正则表达式通常就足够了。然而,请注意,尽管有这个名字,它们并不严格规则,因为它们可以代表更大的语言类别。因此,如果您在理论环境中遇到过它们,它们可能并不总是具有您所期望的时间/空间复杂性。 (对于 Perl/Python/等也是如此。)

对于 CFG,这是一个完全不同的问题。 F# PowerPack 中的 Fsyacc(与词法分析器 fslex 一起)是标准 F# LALR 解析器生成器,它将匹配有用的 CFG 子类。或者,您可以尝试 http://www.quanttec.com/fparsec/ 中的 FParsec 解析器组合器库。 .

关于F#/.net 中的正则表达式/CTFG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234819/

相关文章:

regex - 在 Sweave 表达式中查找 R 代码的正则表达式

java - 正则表达式有异常(exception)

python - 使用 CFG 解析枚举

regex - "modern"正则表达式的识别能力

c# - 我如何使用 RegEx Asp.net C# 获取 BODY html 标记(来自字符串)内的所有内容#

javascript - 使用正则表达式在javascript中的几种不同类型的标签之间选择文本

f# - 定义中结构化构造的意外开始。预期为 '=' 或其他标记 F#

f# - 抽象元组函数中的参数名称

asynchronous - 如何通过超时停止等待 TaskCompletionSource 周围的异步包装器?

autocomplete - 如何为编程语言实现自动完成器