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

标签 regex ocaml

我试图知道字符串是否格式正确,因为用逗号分隔的字符串(如“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/

相关文章:

python - python中的正则表达式

java - 如何使用正则表达式从 mailto 链接中提取信息

ubuntu - 在 Manjaro 上使用 OCaml 版本 4.08.1 编译 unison 2.48.4 版本

functional-programming - OCaml 中的 `union` 是什么,真的

ocaml - 警告是什么意思?

php - 解析 PHP 中的属性/值列表

c++ - 读取 std::string,从 std::string 中删除所有特殊字符

mysql - 如何在 MySQL 中使用正则表达式进行搜索和替换?

emacs - 如何在 Emacs 中执行一行 OCaml 代码?

compiler-errors - 如何从 Ocaml 编译器中获取更多信息