我有两个 QRegExp 对象,用于搜索某些文本的开头和结尾。我的代码看起来像:
// strText defined earlier
QRegExp start(...);
QRegExp end(...);
int iStart = start.indexIn(strText);
int iEnd = end.indexIn(strText, iStart) + end.matchedLength();
关于这段代码,我有两个问题:
(1) 假设找到了每个正则表达式正在寻找的文本。调用上述代码会在运行时调用以下错误:
TerminalWindow.exe 中 0x66b48b3f 处未处理的异常:0xC0000005:访问冲突读取位置 0x00000004。
如果我将代码更改为以下内容,我会得到同样的错误:
int iStart = start.indexIn(strText);
int iTemp = end.matchedLength();
int iEnd = start.indexIn(strText, iStart) + iTemp;
第二个代码片段中的错误对我来说很有意义,因为内部matchedLength() 可能正在针对尚未分配的对象运行。但是,我不明白为什么我也从第一个代码片段中得到同样的错误。在所有其他条件相同的情况下,操作顺序不是从左到右吗?如果我将代码更改为以下内容,那么我会得到我期望的结果:
// strText defined earlier
QRegExp start(...);
QRegExp end(...);
int iStart = start.indexIn(strText);
int iEnd = end.indexIn(strText, iStart);
iEnd += end.matchedLength();
(2) 如果我的示例中的 strText 看起来像:
<start>
stackoverflow is awesome!
</start>
<start>
I like cake!
</start>
<start>
Girls are pretty!
</start>
如何编写一个 Qt RegExp 来捕获每个起始元素的内容?就像是:
QRegExp reg("<start>(.*?)</start>");
即使它似乎应该与 POSIX 正则表达式一起使用(我相信这是 Qt 实现的),它也永远不会为我工作。(注意:我知道执行此操作的理想方法是使用 XML/HTML 解析器(我实际上正在解析 HTML),但我现在对正则表达式解决方案感兴趣)。
谢谢!