Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Regex 字符串中的正则表达式十六进制字节_Regex_String_Qt_Hex_Byte - Fatal编程技术网

Regex 字符串中的正则表达式十六进制字节

Regex 字符串中的正则表达式十六进制字节,regex,string,qt,hex,byte,Regex,String,Qt,Hex,Byte,我正在尝试验证Qt中LineEdit小部件的输入。我第一次使用正则表达式,所以我需要一些帮助。我希望允许1到32个十六进制字节之间用空格分隔,例如,这应该是有效的: "0a 45 bc 78 e2 34 71 af" 下面是一些无效输入的示例: “1 34 bc 4e”->它们需要成对写入,因此1必须是01 “8a cb3 58 11”->cb3无效 “56 f2 a8 69”->不允许有尾随空格 经过一番深思熟虑后,我想出了这个似乎有效的正则表达式: "([0-9A-Fa-f]{2}[ ])

我正在尝试验证Qt中LineEdit小部件的输入。我第一次使用正则表达式,所以我需要一些帮助。我希望允许1到32个十六进制字节之间用空格分隔,例如,这应该是有效的:

"0a 45 bc 78 e2 34 71 af"
下面是一些无效输入的示例:

“1 34 bc 4e”
->它们需要成对写入,因此1必须是01

“8a cb3 58 11”
->cb3无效

“56 f2 a8 69”
->不允许有尾随空格

经过一番深思熟虑后,我想出了这个似乎有效的正则表达式:

"([0-9A-Fa-f]{2}[ ]){0,31}([0-9A-Fa-f]{2})"
现在谈谈我的问题:

  • 您是否看到我的正则表达式有任何测试未能显示的问题?如果是,我如何改进它

  • 有没有更干净的书写方法


  • 提前感谢

    我不确定您使用了什么方法进行验证,但一个可能的问题是,该方法在字符串中搜索与模式匹配的子字符串,而不是检查与模式匹配的字符串。用于根据正则表达式验证字符串

    在任何情况下,添加锚定
    ^
    $
    都更安全(但在使用
    exactMatch
    时不需要):

    因为您正在进行验证,所以不需要捕获。而且您不需要在
    []

    "^(?:[0-9A-Fa-f]{2} ){0,31}[0-9A-Fa-f]{2}$"
    
    您可以使用方法设置区分大小写。如果将其设置为
    Qt::CaseSensitive
    ,则可以将正则表达式缩短一点:

    "^(?:[0-9a-f]{2} ){0,31}[0-9a-f]{2}$"
    

    次要优化:使用不区分大小写的标志。否则,太好了。谢谢你的帮助。我只使用
    QLineEdit
    小部件的
    setValidator
    方法,我不知道内部用于实际匹配的是什么。@dbostream:如果您传入
    QRegExpValidator
    ,那么它很可能会在内部使用
    exactMatch
    (根据
    QRegExpValidator
    工作原理的描述推断:)是的,我就是这样做的。谢谢
    "^(?:[0-9a-f]{2} ){0,31}[0-9a-f]{2}$"