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

How to make a regular expression recognise whitespace in html element

本文关键字:空白 元素 html 何使 正则表达式 识别      更新时间:2023-10-16

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

简介

您的问题实际上与正则表达式本身无关,而是与您如何读取数据有关。


解释

当使用operator>>时,您可以通过"word"有效地读取"word",因为操作符将读取尽可能多的字符,直到它找到空白 (空白operator>>忽略)。

如果您想从std::cin中读取整行并将其存储在string s中,则应该使用std::getline,如下面的示例代码片段所示:

while (std::getline (std::cin, s)) {
  ...
}

注意:在代码片段中构造的正则表达式是合法的c++,但是有些实现并不完全支持使用字符类,例如w。例如,如果您正在使用libstdc++,则必须将w的使用替换为等效的[_[:alnum:]],使string content = "([_[:alnum:] ]*)" .