“单词”的regexp;“港口”;下列空格和数字
我正在研究子类: 现在,在使用此类的应用程序中,我有以下示例日志: 来自IP地址为192.168.1.4的主机的新传入连接,使用 端口56748“单词”的regexp;“港口”;下列空格和数字,regex,qregexp,Regex,Qregexp,我正在研究子类: 现在,在使用此类的应用程序中,我有以下示例日志: 来自IP地址为192.168.1.4的主机的新传入连接,使用 端口56748 端口号的正则表达式是什么(字符串末尾的数字,紧跟单词port-区分大小写)和特别是一个空格?有什么原因不能使用类似端口\d+$的内容吗 无论左侧上下文如何,\d+$正则表达式都将匹配字符串末尾的一个或多个数字 您应该考虑使用捕获方法: \ \bPAT+ +(\d+)$ < /C>(访问捕获1)。不过,这需要一些代码调整 原因是: 与Perl相同的语法支
端口号的正则表达式是什么(字符串末尾的数字,紧跟单词port-区分大小写)和特别是一个空格?有什么原因不能使用类似
端口\d+$
的内容吗 无论左侧上下文如何,\d+$
正则表达式都将匹配字符串末尾的一个或多个数字
您应该考虑使用捕获方法:<代码> \ \bPAT+ +(\d+)$ < /C>(访问捕获1)。不过,这需要一些代码调整
原因是: 与Perl相同的语法支持零宽度正和零宽度负前瞻断言(?=pattern)
和(?!pattern)
不支持Perl的lookbehind断言、“独立”子表达式和条件表达式
如果您只需要匹配ASCII水平空格,则可以将空格替换为
[\t]
(或者您可以尝试使用\r
和\n
排除的“[^\\s\r\n]”
) 您尝试的模式是什么,但不起作用?还有,port
一词后面是否可能跟有任意数量的空格?@WiktorStribiżew我试过rulePortNumber.pattern=QRegExp(\\d+$)代码>,但是,它会在每个日志字符串的末尾为每个数字着色。这是真的。如果数字和端口之间只有1个空格,您可以尝试(?我尝试了端口\d+$
,但是它同时为单词端口和后面的数字着色。注意,我使用了字符串文字作为建议的模式(因此使用了双反斜杠),而解释的正则表达式仅在反斜杠中使用,如代码所示(并且有一个反斜杠)。此外,如果您可以访问Qt5中的QRegularExpression
,您可以使用更合适的\bport[\t]+\K\d+$
。是的,这是事实,我遵循了。
UeSyntaxHiglighter::UeSyntaxHiglighter(QTextDocument* const parent)
: QSyntaxHighlighter(parent)
{
UeHighlightRule ruleInfo;
UeHighlightRule ruleWarning;
UeHighlightRule ruleError;
UeHighlightRule ruleIPv4Address;
UeHighlightRule rulePortNumber;
UeHighlightRule ruleProtocolCommand;
UeHighlightRule ruleProtocolCommandAcknowledge;
QTextCharFormat ruleInfoFormat;
QTextCharFormat ruleWarningFormat;
QTextCharFormat ruleErrorFormat;;
QTextCharFormat ruleIPv4AddressFormat;
QTextCharFormat ruleProtocolCommandFormat;
QTextCharFormat ruleProtocolCommandAcknowledgeFormat;
ruleInfoFormat.setForeground(Qt::darkBlue);
ruleInfoFormat.setFontWeight(QFont::ExtraLight);
ruleInfo.pattern=QRegExp("^\\[INFO\\].*");
ruleInfo.format=ruleInfoFormat;
ruleWarningFormat.setForeground(Qt::darkYellow);
ruleWarningFormat.setFontWeight(QFont::Normal);
ruleWarning.pattern=QRegExp("^\\[WARNING\\].*");
ruleWarning.format=ruleWarningFormat;
ruleErrorFormat.setForeground(Qt::darkRed);
ruleErrorFormat.setFontWeight(QFont::ExtraBold);
ruleError.pattern=QRegExp("^\\[ERROR\\].*");
ruleError.format=ruleErrorFormat;
ruleIPv4AddressFormat.setFontWeight(QFont::ExtraBold);
ruleIPv4Address.pattern=QRegExp("(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})");
ruleIPv4Address.format=ruleIPv4AddressFormat;
//BUG apply same coloring rule to port number as IP address
rulePortNumber.pattern=QRegExp("\\d+$");
rulePortNumber.format=ruleIPv4AddressFormat;
ruleProtocolCommandFormat.setFontCapitalization(QFont::AllUppercase);
ruleProtocolCommandFormat.setFontWeight(QFont::ExtraBold);
ruleProtocolCommandFormat.setForeground(Qt::darkGreen);
//BUG rule is not applied, i.e. text coloring is not active
ruleProtocolCommand.pattern=QRegExp("^CMD.\\*");
ruleProtocolCommand.format=ruleProtocolCommandFormat;
ruleProtocolCommandAcknowledgeFormat.setFontCapitalization(QFont::AllUppercase);
ruleProtocolCommandAcknowledgeFormat.setFontWeight(QFont::ExtraBold);
ruleProtocolCommandAcknowledgeFormat.setForeground(Qt::darkMagenta);
//BUG rule is not applied, i.e. text coloring is not active
ruleProtocolCommandAcknowledge.pattern=QRegExp("^ACK.\\*");
ruleProtocolCommandAcknowledge.format=ruleProtocolCommandAcknowledgeFormat;
m_ueHighlightRules.append(ruleInfo);
m_ueHighlightRules.append(ruleWarning);
m_ueHighlightRules.append(ruleError);
m_ueHighlightRules.append(ruleIPv4Address);
m_ueHighlightRules.append(rulePortNumber);
m_ueHighlightRules.append(ruleProtocolCommand);
m_ueHighlightRules.append(ruleProtocolCommandAcknowledge);
}