Ocaml - 用逗号分隔的正则表达式匹配词不起作用

Ocaml - regexp matching words separated by comma doesn't work

我想知道一个字符串是否格式正确,如 "foo,bar,bang" 的逗号分隔的字符串和 "foo," 的字符串不应该匹配。

我不明白为什么我的正则表达式在以下示例中不起作用:

#load "str.cma"

let regexp = Str.regexp "[a-ZA-Z0-9]+(,[a-ZA-Z0-9]+)*"
let str = "foo,bar,bang"  
let s = Str.string_match regexp str 0 

我的正则表达式看起来不错,但最后一行的返回结果是错误的。我哪里错了?

圆括号 ( ... ) 匹配 OCaml 正则表达式中的实际圆括号。要获得分组括号,您需要使用 \( ... \).

因此,以下应该有效:

#load "str.cma";;

let regexp = Str.regexp "[a-zA-Z0-9]+\(,[a-zA-Z0-9]+\)*"
let str = "foo,bar,bang"  
let s = Str.string_match regexp str 0;;

备注:

  • 需要在字符串常量中转义 \,因此 \( ... \)
  • 我修正了你的 a-z 范围