首页 文章

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

提问于
浏览
2

我试着知道一个字符串很好地形成了一个用逗号分隔的字符串,如“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

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

1 回答

  • 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 范围

相关问题