令人惊讶的是,正则匹配器不匹配反斜杠正确。例如
Regex.split(~r{\\}, "C:\foo\bar")
["C:\foo\bar"]
Regex.match?(~r/\\/, "C:\foo\bar")
false我希望有一场正面的比赛,但也许我逃脱了\的错误。让我们来检验一下:
Regex.escape("\\")
"\\\\"
Regex.split(~r{\\\\}, "C:\foo\bar")
["C:\foo\bar"]
Regex.match?(~r/\\\\/, "C:\foo\bar")
false还是没有匹配。在这一点上相当困惑。如何在regex中转义\以匹配文本\,正如您在我的usecase中看到的,我希望拆分一个窗口路径。
发布于 2020-02-05 16:12:49
Regex很好;您的输入不是您认为的那样。字符串中的反斜杠转义。
String.split("C:\foo\bar", "")
#⇒ ["", "C", ":", "\f", "o", "o", "\b", "a", "r", ""]
String.length("C:\foo\bar")
#⇒ 8注意"\f"和"\b"。该字符串不包含反斜杠,但包含"\f"和"\b"代码点。
这就是说,您需要向Regex.split/3传递一个正确的字符串,以获得预期的结果。
Regex.split(~r|\\|, "C:\\foo\\bar")
#⇒ ["C:", "foo", "bar"]https://stackoverflow.com/questions/60079568
复制相似问题