最近开始学习Qt了,看的自然是《C.plus.plus.GUI.Programming.with.Qt.4》。
在照着书上敲第二章那个GoToCellDlg例子的时候,发现lineEdit一直无法输入内容。
GoToCellDialog::GoToCellDialog(QWidget *parent)
: QDialog(parent)
{
setupUi(this);
QRegExp regExp("[A-Za-z][1-9][0-9]{0, 2}");
lineEdit->setValidator(new QRegExpValidator(regExp, this));
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
}
但是,如果注释掉:
// QRegExp regExp("[A-Za-z][1-9][0-9]{0, 2}");
// lineEdit->setValidator(new QRegExpValidator(regExp, this));
则又可以输入内容了。无奈,找到书中源码,复制粘贴之,竟然一切正常!!!
仔细对比自己手打的代码和随书源代码之后,我发现,我在敲正则表达式的时候,习惯性地把:
{0,2}
写成了:
{0, 2} // 注意逗号后面的空格
查了一下维基百科中正则表达式这个词条。其中在介绍{n,m}时这样说:
“m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}
」将匹配「fooooood
」中的前三个o。「o{0,1}
」等价于「o?
」。请注意在逗号和两个数之间不能有空格。”
看来以后敲正则表达式不能随便添加空格啊!
最后,向伟大的维基百科致敬!!!