簡體   English   中英

QRegExp和QSyntaxHighlighter的雙引號文本

[英]QRegExp and double-quoted text for QSyntaxHighlighter

QRegExp模式用於捕獲QSyntaxHighlighter的引用文本是什么?

測試圖案

“一個”或“兩個”或“三個”

到目前為止,我已經嘗試過:

QRegExp rx("\\0042.*\\0042");
QRegExp rx("(\\0042).*?\\1");

最后一個模式在regexpal.com上成功,但是QRegExp類沒有成功。

編輯:如果您簽出語法突出顯示示例 ,已經有此。

http://qt-project.org/doc/qt-4.8/richtext-syntaxhighlighter-highlighter-cpp.html

 quotationFormat.setForeground(Qt::darkGreen);
 rule.pattern = QRegExp("\".*\"");
 rule.format = quotationFormat;
 highlightingRules.append(rule);

只需復制Qt熒光筆示例中的大多數代碼,就可以設置好了。

QRegEx中的Greedy訴Lazy Match

在Qt對RegEx的變體的描述中,它說:

注意:量詞通常是“貪婪的”。 它們始終匹配盡可能多的文本。 例如,0 +會匹配找到的第一個零以及第一個零之后的所有連續零。 應用於“ 20005”,它與“ 20005”匹配。 量詞可以設為非貪婪,請參閱setMinimal()。

如果使用setMinimal(true)來獲得延遲匹配而不是貪婪匹配的效果,則可以將其取消。 其他正則表達式評估器使用類似*?東西*? +? 執行懶惰的比賽。 有時,我使用gskinner的正則表達式引擎來測試我的表達式。

以下是您要查找的代碼。 它很大程度上基於此處給出的示例。

#include <QCoreApplication>
#include <QRegExp>
#include <QDebug>
#include <QStringList>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "\"one\" or \"two\" or \"three\"";

    QRegExp rx("\".*\"");
    rx.setMinimal(true);
     int count = 0;
     int pos = 0;
     while ((pos = rx.indexIn(str, pos)) != -1) {
         ++count;
         pos += rx.matchedLength();
         qDebug() << rx.cap();
     }

    return a.exec();
}

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM