正则表达式“\|\|”在 OCaml 中错误地匹配字符串“;;”
The regex "\|\|" in OCaml incorrectly matches the string ";;"
我在 OCaml 中使用 Str.regexp 来检测双分号或 or 和符号等,但很多正则表达式没有按预期工作。例如,
Str.string_match (Str.regexp "\|\|") ";;" 0
returns 是的。你必须转义像'|'这样的字符,所以我使用了“\|\|”作为我的正则表达式而不是“||”。但是,我听说您可能需要转义两次并写入“\\|\\|”在 Ocaml 中,但这也不起作用。那我该怎么办? Rubular 认为 Regex 应该可以工作,但这是 Ocaml 而不是 Ruby,所以我可能错过了一些细微的语言差异。
事实证明,正则表达式
"||"
会起作用。通常,'|'代表or和需要转义才能代表文字条,但是在Ocaml中好像是相反的
没有(被广泛接受的)正则表达式标准。虽然出现了许多通用约定,但每个实现都是不同的。因此,您应该始终引用 the documentation of the implementation you're using.
但是,如果您想要一个提供更常规语法的实现,我建议您使用 ocaml-re
,它是纯 OCaml 中的正则表达式实现,提供多种不同语法、Perl、Posix 和 Emacs 以及 PCRE 的一个子集。
我在 OCaml 中使用 Str.regexp 来检测双分号或 or 和符号等,但很多正则表达式没有按预期工作。例如,
Str.string_match (Str.regexp "\|\|") ";;" 0
returns 是的。你必须转义像'|'这样的字符,所以我使用了“\|\|”作为我的正则表达式而不是“||”。但是,我听说您可能需要转义两次并写入“\\|\\|”在 Ocaml 中,但这也不起作用。那我该怎么办? Rubular 认为 Regex 应该可以工作,但这是 Ocaml 而不是 Ruby,所以我可能错过了一些细微的语言差异。
事实证明,正则表达式
"||"
会起作用。通常,'|'代表or和需要转义才能代表文字条,但是在Ocaml中好像是相反的
没有(被广泛接受的)正则表达式标准。虽然出现了许多通用约定,但每个实现都是不同的。因此,您应该始终引用 the documentation of the implementation you're using.
但是,如果您想要一个提供更常规语法的实现,我建议您使用 ocaml-re
,它是纯 OCaml 中的正则表达式实现,提供多种不同语法、Perl、Posix 和 Emacs 以及 PCRE 的一个子集。