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

时间:2015-03-07 22:57:57

标签: regex ocaml

我试着知道一个字符串格式正确,形成一个用逗号分隔的字符串,如" foo,bar,bang"和#34; 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 

我的正则表达式似乎很好但是最后一行的返回结果是假的。我哪里错了?

1 个答案:

答案 0 :(得分:2)

括号( ... )匹配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范围