我有一个大约30行的简单文本文件,如下所示:
A 45.0 X 250.0
Y -23.8
A 22.0 X -1016.0
Y 4.9
L 0
M 16.1 T 0 N 0
...etc...
...etc...
每行包含1到3对大写字母和浮点数。所有分隔符都是空格 然后我创建了一个程序,用这个简单的正则表达式检查该文件的每一行:
std::ifstream stream;
try
{
stream.open("/ArchivioProgrammi/p1.prg", std::ios::in);
}
catch(std::exception& e)
{
std::stringstream st;
st << "Error opening file.\nError: " << e.what();
throw MyLoadException(st.str());
}
std::string line;
unsigned int lineCount = 0;
while(std::getline(stream, line)) // Per ogni linea del file estraggo fino a 6 token
{
if(line.length() == 0) continue;
/*** This "if" hangs indefinitely!! ***/
if(!std::regex_match(line, std::regex("([A-Z] [\\-\\+]?[0-9]+(\\.[0-9]+)?)( [A-Z] [\\-\\+]?[0-9]+(\\.[0-9]+)?){0,2}")))
{
std::stringstream st;
st << "Line #" << lineCount << " is invalid.";
throw MyLoadException(st.str());
}
// Tokenize the line and do something with the tokens...
++lineCount;
}
if(stream.eof())
{
stream.close();
}
每当控件到达if
时,程序就会永远挂起!界面无响应,没有错误,没有false
或true
!为什么呢?
我正在使用OpenSuse最新版本的KDevelop进行开发。
答案 0 :(得分:0)
使用原始字符串,它就像一个魅力。 即使我从来没有理解用双引号和括号开始这样的字符串的含义....
我怎么用较短的形式编写正则表达式?
答案 1 :(得分:0)
尝试通过在线测试确认您的正则表达式是否正确(例如online Regex tester)。您可能还想考虑一次使用一行上的正则表达式逐行迭代输入文件。或者根本不使用正则表达式。