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

时间:2011-12-31 12:43:03

标签: regex d

这可能听起来像一个愚蠢的问题,但在D(使用std.regex)你如何匹配字符串中的文字点?

使用此代码我正在检查文件扩展名.bmp,所以我对它执行一个简单的正则表达式匹配。如果我尝试像这样逃避点,我会收到错误。

Regex!char Pattern = regex("\.bmp$", "i");

if (match(FileName, Pattern).empty)
{
    FileName ~= ".bmp";
}

Error: Undefined escape sequence \.

即使在documentation中,它也没有提到匹配的点。

有什么想法吗?

2 个答案:

答案 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 '\.'

您有两种选择:

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

答案 1 :(得分:8)

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

所以最后,它应该看起来像"\\.bmp$"