Regex 字符串中的正则表达式十六进制字节
我正在尝试验证Qt中LineEdit小部件的输入。我第一次使用正则表达式,所以我需要一些帮助。我希望允许1到32个十六进制字节之间用空格分隔,例如,这应该是有效的: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}[ ])
"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}$"