在D中使用std.regex库,你如何匹配一个点?

Gar*_*hby 6 regex d

这可能听起来像一个愚蠢的问题,但在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)

您有两种选择:

  1. 逃离\你的字符串即"\\.bmp$".
  2. 使用原始字符串文件,即r"\.bmp$".原始字符串文字忽略所有转义序列.它们专为正则表达式模式而设计.


Fem*_*ref 8

我想你需要双重逃避它(你想\.在正则表达式).在你当前的代码中,你是单个转义它,所以D试图将它解释为自己的东西,而不是正则表达式.双重转义告诉D你想要\字符串中的文字.

所以最后看起来应该是这样的"\\.bmp$".