Qt正则表达式与HTML标记InnerText匹配
我有一个带有一个Qt正则表达式与HTML标记InnerText匹配,html,regex,qt,Html,Regex,Qt,我有一个带有一个…标记的html文件。需要什么正则表达式来匹配pre中的所有内容 QString pattern = "<pre>(.*)</pre>"; QRegExp rx(pattern); rx.setCaseSensitivity(cs); int pos = 0; QStringList list; while ((pos = rx.indexIn(clipBoardData, pos)) != -1) { list << rx.cap(1)
…
标记的html文件。需要什么正则表达式来匹配pre中的所有内容
QString pattern = "<pre>(.*)</pre>";
QRegExp rx(pattern);
rx.setCaseSensitivity(cs);
int pos = 0;
QStringList list;
while ((pos = rx.indexIn(clipBoardData, pos)) != -1) {
list << rx.cap(1);
pos += rx.matchedLength();
}
int begin = clipBoardData.indexOf("<pre");
int end = clipBoardData.indexOf("</body>");
QString result = data.mid(begin, end-begin);
QString模式=“(*)”;
(<pre>.*?</pre>)+
QRegExp-rx(模式);
rx.设置案例敏感性(cs);
int pos=0;
QStringList表;
而((pos=rx.indexIn(剪贴板数据,pos))!=-1){
列表
相反,请使用真正的HTML解析器,例如,HTML不是,您不使用正则表达式来解析它
相反,使用加载XML,然后查找前置节点,然后提取其内容。我使用子字符串:
QRegExp re("(<pre>.*?</pre>)+", Qt::CaseInsensitive);
re.indexIn(html_input);
QStringList list = re.capturedTexts();
int begin=clipBoardData.indexOf(“我必须同意其他人的看法。Drupal 6.x和更早版本使用regex对HTML数据进行大量处理。如果创建64Kb或更大的页面,它会很快崩溃。因此,使用DOM或像您这样使用indexOf()
是一个更好更快的解决方案
现在,对于那些有兴趣了解更多关于正则表达式的人,Qt使用perl实现。这意味着您可以使用lazy运算符。您的正则表达式将变成:
(*)+
要获取代码中的每个块(尽管如果只有一个块,则不需要问号和加号)。请注意,此处不需要正则表达式开头和结尾处的分隔符
QRegExp-re(“(.*?+”,Qt::不区分大小写);
关于indexIn(html_输入);
QStringList list=re.capturedTexts();
现在,列表应该有一个或多个标记。对于这样一个简单的文件,要摘录一些文本?也许对内容进行子字符串比较简单…我不同意。如果您很了解文件结构,那么在其中查找内容应该与正则表达式无关。我不同意。如果您很了解文件结构,那么查找内容应该没有问题在中,正则表达式不应该有问题。@predrapanojlovic:如果文件结构稍有变化怎么办?如果有转义字符怎么办?我说得很准确:“如果你对文件结构很了解的话。”“。意思是,您已经生成了它,或者生成它的系统是一致的。@PredragManojlovic:这会导致非常脆弱的代码,很难更改(或者使更改导致微妙的错误)。恕我直言,这是不明智的。只是一个注释“?”不是贪婪的运算符。它是一个非贪婪的修饰符。这就是我使用“*?”的原因。”是的,但它的意思是:“这意味着你可以使用贪婪运算符”,而不是这意味着你可以使用非贪婪修饰符“@predrapanojlovic啊!Ooop!用正确的术语修正了我的答案。