我运行了这个简单的程序:
#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字符。