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