【发布时间】:2018-08-06 22:30:02
【问题描述】:
我正在尝试从 HTML 源代码中提取 cmets 部分。它有点工作,但不完全。
<html><body>Login Successful!</body><!-- EXTRACT-THIS --></html>
到目前为止,这是我的代码:
#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
#include <regex>
using namespace std;
int main()
{
string s =
"<html><body>Login Successful!</body><!-- EXTRACT-THIS --></html>";
// Regular expression to extract from HTML comment
// <!-- comment -->
regex r("[<!--\r\n\t][\r\n\t-->]");
for (sregex_token_iterator it = sregex_token_iterator(
s.begin(),
s.end(),
r,
-1);
it != sregex_token_iterator(); ++it)
{
cout << "TOKEN: " << (string) *it << endl;
}
return 0;
}
我想我的主要问题是有没有办法改进我的正则表达式?
【问题讨论】:
-
如果 ECMAScript 支持原子组,您可以在 group 3 中找到
"(?>(<(?:(?:(?:(script|style|object|embed|applet|noframes|noscript|noembed)(?:\\s+(?>\"[\\S\\s]*?\"|'[\\S\\s]*?'|(?:(?!/>)[^>])?)+)?\\s*>)[\\S\\s]*?</\\2\\s*(?=>))|(?:/?[\\w:]+\\s*/?)|(?:[\\w:]+\\s+(?:\"[\\S\\s]*?\"|'[\\S\\s]*?'|[^>]?)+\\s*/?)|\\?[\\S\\s]*?\\?|(?:!(?:(?:DOCTYPE[\\S\\s]*?)|(?:\\[CDATA\\[[\\S\\s]*?\\]\\])|(?:ATTLIST[\\S\\s]*?)|(?:ENTITY[\\S\\s]*?)|(?:ELEMENT[\\S\\s]*?))))>))*?(<!--[\\S\\s]*?-->)"替换为$1。 -
欢迎来到 Stack Overflow!如果您认为代码可以正常工作,请考虑在Code Review 上以更完整的方式展示您的工作(及其单元测试)。您可能会得到一些建议,使其更高效、更易于阅读和更好地测试。在您这样做之前,请务必先阅读A guide to Code Review for Stack Overflow users,因为那里有些事情的处理方式不同 - 例如。问题标题应该简单地说明代码做了什么,因为问题总是“我该如何改进?”。
-
会做...但是我需要解决一些小问题。