该match
关键字适用于 OCaml 模式。正则表达式不是 OCaml 模式,它是一种不同的模式,所以你不要使用match
它们。
在与功能相同的Str
模块regexp
中是匹配的功能。
如果你有很多正则表达式匹配要做,你可以使用ocamllex
,它读取一个与你的(不幸的是无效的)定义相似的定义文件idregex
,并生成 OCaml 代码来进行匹配。
这是一个会话,展示了如何使用该Str
模块对您的模式进行简单匹配。
$ ocaml
OCaml version 4.01.0
# #load "str.cma";;
# let idregex = Str.regexp "[a-zA-Z]+[a-zA-Z0-9_]*";;
val idregex : Str.regexp = <abstr>
# Str.string_match idregex "a_32" 0;;
- : bool = true
# Str.string_match idregex "32" 0;;
- : bool = false
作为旁注,您的代码看起来并不像 OCaml。它看起来像是 OCaml 和 ocamllex 的混合体。实际上有一个有点像这样的系统,叫做micmatch。看来您正计划使用常用的 OCaml 语言(我对此表示赞赏),但在某些时候查看 micmatch 可能会很有趣。