如何使正则表达式识别html元素中的空格

时间:2014-06-09 19:15:25

标签: c++ regex

我是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;
    }
}

1 个答案:

答案 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:] ]*)"