Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“单词”的regexp;“港口”;下列空格和数字_Regex_Qregexp - Fatal编程技术网

“单词”的regexp;“港口”;下列空格和数字

“单词”的regexp;“港口”;下列空格和数字,regex,qregexp,Regex,Qregexp,我正在研究子类: 现在,在使用此类的应用程序中,我有以下示例日志: 来自IP地址为192.168.1.4的主机的新传入连接,使用 端口56748 端口号的正则表达式是什么(字符串末尾的数字,紧跟单词port-区分大小写)和特别是一个空格?有什么原因不能使用类似端口\d+$的内容吗 无论左侧上下文如何,\d+$正则表达式都将匹配字符串末尾的一个或多个数字 您应该考虑使用捕获方法: \ \bPAT+ +(\d+)$ < /C>(访问捕获1)。不过,这需要一些代码调整 原因是: 与Perl相同的语法支

我正在研究子类:

现在,在使用此类的应用程序中,我有以下示例日志:

来自IP地址为192.168.1.4的主机的新传入连接,使用 端口56748


端口号的正则表达式是什么(字符串末尾的数字,紧跟单词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);
}