如何在 Ocaml 中使用正则表达式找到精确匹配?例如,我有这样的代码:
let contains s1 s2 =
let re = Str.regexp_string s2
in
try ignore (Str.search_forward re s1 0); true
with Not_found -> false
Run Code Online (Sandbox Code Playgroud)
其中 s2 是“_X_1”,s1 将“A_1_X_1”、“A_1_X_2”等字符串提供给函数“contains”。目的是当 s1 为“A_1_X_1”时找到精确匹配。但即使 s1 是“A_1_X_10”、“A_1_X_11”、“A_1_X_100”等,当前代码也会找到匹配。
我尝试使用“[_x_1]”、“[_X_1]$”作为 s2 而不是“_X_1”,但似乎不起作用。有人可以建议什么可能是错的吗?
您可以使用元$字符来匹配行的末尾(假设字符串不包含多行,则它是字符串的末尾)。但你不能把它通过Str.regexp_string;它只是转义了元字符。您应该首先引用实际的子字符串部分,然后附加$,然后从中创建一个正则表达式:
let endswith s1 s2 =
let re = Str.regexp (Str.quote s2 ^ "$")
in
try ignore (Str.search_forward re s1 0); true
with Not_found -> false
Run Code Online (Sandbox Code Playgroud)