[英]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熒光筆示例中的大多數代碼,就可以設置好了。
在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.