Qt 正则表达式简单测

这篇博客介绍了作者初次接触Qt中的正则表达式QRegExp,虽然正则表达式复杂难懂,但作者通过示例代码分享了其初步应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        对正则表达式以前没了解过,这次用到大概看了一下,感觉挺复杂的,没怎么太懂,所以对 QRegExp 也没完全理解,就直接贴代码了:


regexp.h

#ifndef REGEXP_H
#define REGEXP_H

#include <QtGui/QDialog>
#include <QtGui/QLineEdit>
#include <QtGui/QTextEdit>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QListWidget>
#include <QtGui/QVBoxLayout>

class RegexpConner : public QDialog
{
	Q_OBJECT

public:
	RegexpConner( QWidget *parent = 0, Qt::WFlags flags = 0 );
	~RegexpConner();

private slots:
	void	onGet	();

private:
	QLabel		*m_labelRegexp;
	QLabel		*m_labelText;
	QLabel		*m_labelResult;
	QLabel		*m_labelIndex;
	QLineEdit	*m_leditRegexp;
	QLineEdit	*m_leditIndex;
	QTextEdit	*m_teditText;
	QListWidget	*m_listResult;
	QPushButton	*m_btnGet;
	QHBoxLayout	*m_hboxLayout;
	QVBoxLayout	*m_vboxLayout;
};

#endif // REGEXP_H


regexp.cpp

#include "regexp.h"

RegexpConner::RegexpConner( QWidget *parent, Qt::WFlags flags )
	: QDialog( parent, flags )
{
	m_labelRegexp	= new QLabel( "regexp:" );
	m_labelText		= new QLabel( "text:" );
	m_labelResult	= new QLabel( "result:" );
	m_labelIndex	= new QLabel( "index:" );
	m_leditRegexp	= new QLineEdit;
	m_leditIndex	= new QLineEdit;
	m_teditText		= new QTextEdit;
	m_listResult	= new QListWidget;
	m_btnGet		= new QPushButton( "GET" );

	m_hboxLayout	= new QHBoxLayout;
	m_hboxLayout->addWidget( m_btnGet );
	m_hboxLayout->addWidget( m_labelIndex );
	m_hboxLayout->addWidget( m_leditIndex );

	m_vboxLayout	= new QVBoxLayout( this );
	m_vboxLayout->addWidget( m_labelText );
	m_vboxLayout->addWidget( m_teditText );
	m_vboxLayout->addWidget( m_labelRegexp );
	m_vboxLayout->addWidget( m_leditRegexp );
	m_vboxLayout->addLayout( m_hboxLayout );
	m_vboxLayout->addWidget( m_labelResult );
	m_vboxLayout->addWidget( m_listResult );

	setFixedSize( 500, 500 );

	connect( m_btnGet, SIGNAL(clicked()), this, SLOT(onGet()) );
}

RegexpConner::~RegexpConner()
{
}

void RegexpConner::onGet()
{
	m_listResult->clear();

	QString text = m_teditText->toPlainText();
	QString exp = m_leditRegexp->text();
	if( text.isEmpty() || exp.isEmpty() )
		return;

	int index = m_leditIndex->text().toUInt();

	QRegExp qregexp( exp );
	int length = 0;
	int idx = qregexp.indexIn( text, 0 );

	while( -1 != idx ) {
		int num = qregexp.numCaptures();
		QString str = qregexp.cap( index );
		if( !str.isEmpty() ) {
			QListWidgetItem *item = new QListWidgetItem( str );
			m_listResult->addItem( item );
		}
		length = qregexp.matchedLength();
		idx = qregexp.indexIn( text, idx + length );
	}
}

main.cpp

#include "regexp.h"
#include <QtGui/QApplication>
#include <QRegExp>
#include <QTextCodec>
#include <QObject>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	
	RegexpConner rc;
	rc.show();

	return a.exec();
}

以下是测试结果:








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值