2

我运行了这个简单的程序:

#include <iostream>
#include <string>
using namespace std;

#include <boost/regex.hpp>

int main ()
{

//    boost::regex fullname_regex ("[A–Z]+[a–z]*, [A-Z][a–z]*");
boost::regex fullname_regex ("[A-Z]+[a-z]*, [A-Z][a-z]*");

string name;
cout << "Enter you full name: " << flush;

getline (cin, name);
if (! regex_match (name, fullname_regex))
{
    cout << "Error: name not entered correctly" << endl;
}

return 0;
}

我刚刚从某个地方复制的。当我取消注释注释行(原始副本/粘贴的一部分)并注释下一行(由我自己键入)时,程序总是拒绝该名称。否则它会按预期工作。我正在使用 vim。我确实:set list看到了隐藏的字符,并且线条是相同的。我在原始行之前插入了一个很长的注释以便将其向下移动,怀疑是磁盘故障(非常旧的系统),但我仍然得到了同样的错误。这是一个没有 gui 的 ubuntu 服务器,我使用 putty 来执行此操作。我不习惯在 linux 下遇到这样的问题,如果有人知道什么可以解释这种奇怪的行为,请告诉我。也许 vim 仍然使用原始页面中的一些选项,这些选项确实在这里并且已格式化,但:set list没有显示它们?

4

4 回答 4

6

破折号不一样。注释的更长,由不同的字符表示,因此解释不同。常见的复制+粘贴错误。

http://en.wikipedia.org/wiki/Dash

于 2012-12-04T12:03:09.240 回答
3

-注释掉的行中的那个字符是 U+2013 EN DASH,而不是 ASCII 破折号 U+002d。

由于我使用的位图字体有限,打开文件时Unicode字符已经凸出来了,但是可以使用g8命令打印光标下字符的UTF-8编码值,或者使用:call search('[^\x00-\x7F]')定位下一个非-ASCII 字符。

于 2012-12-04T12:08:45.557 回答
1

当我将您的代码粘贴到我的文本编辑器中时,我立即看到您在注释行中的第一个 [AZ] 实际上使用了一个长破折号。

您想要一个简单的破折号,这就是您键入的内容。

于 2012-12-04T12:04:56.080 回答
1
于 2012-12-04T13:21:45.593 回答