- 匹配不大於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));