我试图知道字符串是否格式正确,因为用逗号分隔的字符串(如“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
范围
关于regex - Ocaml - 正则表达式匹配以逗号分隔的单词不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921048/