2015-03-27 6 views
0

Взятые из Qt Syntax Highlighter Пример:Qt Syntax Highlighter Пример выделения правила для одной строки комментарии

//single line comment rule 
singleLineCommentFormat.setForeground(Qt::darkGray); 
rule.pattern = QRegExp("//[^\n]*"); 
rule.format = singleLineCommentFormat; 
highlightingRules.append(rule); 
//string rule 
quotationFormat.setForeground(Qt::darkGreen); 
rule.pattern = QRegExp("\".*\""); 
rule.pattern.setMinimal(true); 
rule.format = quotationFormat; 
highlightingRules.append(rule); 

Проблема заключается в том, когда у вас есть что-то вроде этого:

"inside is darkGreen//"outside is darkGray 

Как вы можете видеть, результат: внутри цитаты будут серыми, включая double /. Но символы вне "" становятся darkGray, который должен находиться в цветном шрифте по умолчанию (обычно, черный). Как настроить RegExp для однострочного комментария, чтобы он знал, что зеленый «//» освобожден от правила подсветки darkGray?

Я попытался добавить это для опалить линии комментария правила:

rule.pattern.setMinimal(true); 

Все еще не будет работать. Я также попытался:

rule.pattern = QRegExp("//[^\n]*\"*"); 
+0

Я также пробовал rule.pattern = QRegExp ("// ([^ \ n] *) | (?! \") "); –

ответ

0
/(\"(?:(?!\/\/).)+?\")/ 

Используя магию не-захват групп и отрицательной aheads смотрите, я проектировал следующее:

quotationFormat.setForeground(Qt::darkGreen); 
rule.pattern = QRegExp("\"(?:(?!\\/\\/).)+\"");//QRegExp("\".*\""); 

rule.pattern.setMinimal(true); 
rule.format = quotationFormat; 
highlightingRules.append(rule); 

Магия применяется, и вы получите поведение вы находясь в поиске.

Ссылки:

https://stackoverflow.com/a/977294/999943

http://regexr.com/3an21

, а также испытанные в этом примере:

http://doc.qt.io/qt-5/qtwidgets-richtext-syntaxhighlighter-example.html

Надежда, что помогает.

+0

Этого было бы недостаточно:' (\ "[^/"] + \") ' – murison

+0

Но тогда вы не можете поместить одну косую черту внутри двойных кавычек. Кроме того, я не думаю, что не захватывающие группы - это требование, но я не изучал, чтобы увидеть, были ли группы захвата задействованы в другом месте кода. – phyatt

+0

ok, не заметил этот раздел – murison

 Смежные вопросы

  • Нет связанных вопросов^_^