- 匹配不大于4567这个数,因此第一个想到的是只要小于4567就都匹配,小于4567不能直接匹配,可是能够匹配小于四位数的整数,也就是说只要是三位数就均可以匹配,那大于四位数的固然是彻底不匹配了,正则表达式能够写作:
[0-9] [0-9][0-9] [0-9][0-9][0-9]
- 如今就只剩下四位数,四位数就须要细分了,首先从它的千位也就是第一位看起,不大于4567,那么第一位固然是不能大于4,因此只要第一位不大于4 的整数就都匹配,正则表达式写作:
[0-3][0-9][0-9][0-9]
- 四位数的第一位解决了,那么就是第二位数了,第二位数不大于5,可是前提是前面的第一位数正好是4,因此第一位正好是四、第二位不大于5,后两位不管是什么都匹配,正则表达式写作:
4[0-4][0-9][0-9]
- 以此类推,第三位不大于6,第四位不大于7,正则表达式分别写作:
45[0-6][0-9] 456[0-7]
- 最后一种状况:正好是4567,正则表达式直接写作:
4567
现有多个匹配条件,须要使用符号|链接多个条件,因此综上条件,正则表达式写作:正则表达式
[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-3][0-9][0-9][0-9]|4[0-4][0-9][0-9]|45[0-6][0-9]|456[0-7]|4567
能够看得出,上面的写法很是冗余,如今将上面的写法稍作简化,写法以下:this
\d|\d{0,2}|\d{0,3}|[0-3]\d{0,3}|4[0-4]\d{0,2}|45[0-6]\d|456[0-7]|4567
/* ^ 和 $ 表示正则表达式的起始和截止位置 * \d 匹配任意数字 * {0,2} 重复0-2次,包括0和2 * 为避免\d被转义,须要先转义\,因此是两个\ */ QRegExp rx("^\\d|\\d{0,2}|\\d{0,3}|[0-3]\\d{0,3}|4[0-4]\\d{0,2}|45[0-6]\\d|456[0-7]|4567$"); // 匹配小于4567 QLineEdit * edit = new QLineEdit(this); edit->setValidator(new QRegExpValidator(rx,this));