我是C ++中正则表达式的新手,想知道是否有人能告诉我这里我做错了什么,我正在尝试使用我可以制作的代码使正则表达式与html元素匹配它在所有情况下都匹配,除非有空格将内容与标签分开
string opening_tag = "(<[[:alpha:]]+>)";
string content = "([\\w ]*)"; // zero or more characters or spaces
string closing_tag = "(</[[:alpha:]]+>)";
string html_element = opening_tag + content + closing_tag;
regex r(html_element);
string s;
while (cin >> s)
{
if (regex_match(s, r))
{
cout << "matched" << endl;
}
}
答案 0 :(得分:2)
您的问题实际上与正则表达式本身无关,而与您阅读数据的方式无关。
使用operator>>
时,您可以通过“word”有效地阅读“word”,因为操作员会读取尽可能多的字符,直到它命中空白(空格被operator>>
忽略)。
如果您想阅读std::cin
中的整行并将其存储在string s
中,则应使用std::getline
,如下面的示例代码段所示:
while (std::getline (std::cin, s)) {
...
}
注意:在您的代码段中构造的正则表达式是合法的C ++,但是有些实现不完全支持使用\w
等字符类。例如,如果您使用的是 libstdc ++ ,则必须将\w
的用法替换为等效的[_[:alnum:]]
,并使string content = "([_[:alnum:] ]*)"
。