如何使正则表达式识别html元素中的空白
How to make a regular expression recognise whitespace in html element
我是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:] ]*)"
.
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 无法通过空白将文本文件行分隔为矢量
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- C 将数据读取到一个结构,但它跳过了我的一个获取线,使该元素空白
- 如何使一个整数向量忽略空白,并在C++中的每个元素上加2
- 如何使正则表达式识别html元素中的空白