regex - Elixir 正则表达式匹配文字反斜杠
问题描述
令人惊讶的是,正则表达式匹配器不能正确匹配反斜杠。例如
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
仍然没有匹配。在这一点上相当困惑。您如何\
在正则表达式中转义以匹配文字\
,正如您在我的用例中看到的那样,我想拆分 Windows 路径。
解决方案
正则表达式很好;你的输入不是你想的那样。字符串中的反斜杠转义。
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"]
推荐阅读
- vue.js - 在页面加载时使用 Nuxt 从数组中设置随机全局颜色
- reactjs - 不同端口上的 docker 容器在相同配置下的工作方式不同
- c++ - Webassemly 内存管理和指针
- java - DAO类Junit测试Java配置(Spring5+Hibernate5)
- sql - 用于 WooCommerce 的 SQL 用于确定特定日期的 FIRST ORDER
- python - 如何更改终端打印颜色?
- python-3.x - 具有 30K 列的数据框的相关性
- python - Pandas drop_duplicates 功能无法正常工作
- php - 会话过期时调用成员函数出错(中间件)
- c++ - 为什么 C++ 中重载二元算术运算符的规范实现通过值传递第一个参数?