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

#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服务器,我用腻子来做。我对Linux下的此类问题不习惯,如果有人对可以解释这种奇怪行为的方式有任何想法,请告诉我。也许vim仍然使用原始页面中的某些选项,即here并已格式化,但是:set list没有显示它们?

最佳答案

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

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

10-07 19:42
查看更多