使用ocaml regexp的麻烦,基本模式不起作用

时间:2016-10-31 06:04:25

标签: regex ocaml

我有这个正则表达式有效:

Str.string_match (Str.regexp "[0-9][0-9][0-9][0-9]\\.[0-9][0-9]\\.[0-9][0-9]") dir 0

但我想简化它,它根本不起作用

"\\d{4}\\.\\d{2}\\.\\d{2}"

还有其他尝试使它工作,但我得出的结论是,它与d,{}甚至与()分组字符有麻烦 这种模式适用于任何其他语言,甚至可用于这个庞大的示例列表http://pleac.sourceforge.net/pleac_ocaml/patternmatching.html

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:5)

如果您查看documentation of the Str module,就会发现不支持\d等Perl风格的符号。

Perl-Compatible Regular Expression library

答案 1 :(得分:1)

您可以使用支持“\ d”语法的其他库,例如ocaml-re(使用纯OCaml编写并支持多种正则表达式语法,包括POSIX和PCRE的子集)。

例如:

$ opam install re

$ ocaml
# #use "topfind";;
# #require "re.pcre";;
# let re = Re_pcre.regexp "\\d{4}\\.\\d{2}\\.\\d{2}";;
# Re.execp re "1234.01.243";;
- : bool = true
# Re.execp re "1234.501.24";;
- : bool = false