如何解析除括号中的少数字符外的许多字符?

How to parse many characters except few in the parentheses?

解析除少数字符外的任何字符的最佳方法是使用 noneOf 组合器, 不幸的是,如果我按以下方式组合它,它就不起作用:

Combine.parse (Combine.parens <| Combine.many <| Combine.Char.noneOf ['"', '\']) "()"

Err ((),{ data = "()", input = "", position = 2 },["expected \")\""])
: Result.Result
    (Combine.ParseErr ()) (Combine.ParseOk () (List Char))

您使用 noneOf 会导致解析器消耗所有字符 ,包括 右括号。由于内部部分使用右括号,Combine.parens 解析器将看不到右括号。您需要使 many <| noneOf ... 解析器在右括号处停止。

考虑将右括号添加到 noneOf 中的字符列表:

Combine.parse (Combine.parens <| Combine.many <| Combine.Char.noneOf ['"', '\', ')']) "()"