我试着知道一个字符串格式正确,形成一个用逗号分隔的字符串,如" 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
我的正则表达式似乎很好但是最后一行的返回结果是假的。我哪里错了?
答案 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
范围