这可能听起来像一个愚蠢的问题,但在D(使用std.regex)你如何匹配字符串中的文字点?
使用此代码我正在检查文件扩展名.bmp,所以我对它执行一个简单的正则表达式匹配。如果我尝试像这样逃避点,我会收到错误。
Regex!char Pattern = regex("\.bmp$", "i");
if (match(FileName, Pattern).empty)
{
FileName ~= ".bmp";
}
Error: Undefined escape sequence \.
即使在documentation中,它也没有提到匹配的点。
有什么想法吗?
答案 0 :(得分:10)
您的"\.bmp$"
字符串会自行转义,因此会出错。 D认为你试图逃避字符串中的.
,但\.
不是有效的转义序列。
请注意,这不是D特有的; C++ gives you the same error
const char* regex = "\.bmp$";
使用g ++ 4.3.4进行编译得出:
prog.cpp:1: error: unknown escape sequence '\.'
您有两种选择:
\
,即"\\.bmp$"
。r"\.bmp$"
。原始字符串文字忽略所有转义序列。它们专为正则表达式模式而设计。答案 1 :(得分:8)
我猜你需要双重逃避它(你想在正则表达式中\.
)。在你当前的代码中,你是单个转义它,所以D试图将它解释为自己的东西,而不是正则表达式。双重转义告诉D你想要字符串中的文字\
。
所以最后,它应该看起来像"\\.bmp$"
。