正则表达式

Qt正则表达式

Qt之正则表达式
常用正则表达式(汉字)

一、规则

[ ]	    包含一系列字符
[^ ]	包含之外一系列字符
( )     子表达式的开始和结束位置
{ }     匹配次数的符号

[ABCD]  将会匹配一个A或者一个B或者一个C或者一个D。
[A-D]   这跟[ABCD]所要表达的是一样的意思。
[^abc]  包含abc之外的任意字符
[0-9]   可以用\d来代替。

{m,n}	至少重复m次,最多重复n次
{m,}	至少重复m次
{,n}    最多n次,{0,n}
{n}	    重复n次 {n,n}
?	    {0,1}  0次或者1+	    {1,}   至少出现1*	    {0,}  不出现或出现任意次
x{1,1}  匹配一个但仅仅一个x。
x{1,5}  意味着匹配至少一个但不超过5个的x。

.	 除了换行符以外的任意字符
/d   [0-9] 任意一个数字              /D  所有非数字字符,大写表示相反的
/w	 字母、数字、下划线、汉字         /W  所有字母、数字、下划线以外的字符
/s	 任意的空白符                    /S  所有非空白字符
/b	 单词的开始或结尾                /B  匹配非单词边界,即左右两边都是 "/w" 范围或者左右两边都不是 "/w" 范围时的字符缝隙
/~	 字符串的开始
\n   第n个反向引用,n从1开始编号,   \1 就表示前面第一个捕获到的文本
$	 字符串的结束
^    字符串开始位置,不匹配任何字符
$    字符串结尾位置,不匹配任何字符
//正则表达式因为出现一些特殊字符,在C/C++代码里使用时,必须进行转换。
"(\\S+)\\s*=\\s*(\\S*)"   //即是:"(\S+)\s*=\s*(\S*)"

一、Qt中的应用

1、限制输入

QRegExp regEdit("(0)|([1-9][0-9]{0,1})|([1-2][0-9]{0,2})|(300)");     //0-300
ui->lineEdit->setValidator(new QRegExpValidator(regEdit));

QRegExp regExp; 
regExp.setPattern("^[a-zA-Z0-9_\u4e00-\u9fa5\\w]+$"); //数字,大小写英文字母,下划线,汉字
// 非负整数(正整数 + 0) 
"^/d+$"

// 正整数
"^[0-9]*[1-9][0-9]*$"

// 非正整数(负整数 + 0)
"^((-/d+)|(0+))$" 

// 负整数 
"^-[0-9]*[1-9][0-9]*$"

// 整数   
"^-?/d+$"   

// 非负浮点数(正浮点数 + 0)  
"^/d+(/./d+)?$"

// 正浮点数 
"^(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*))$"

// 非正浮点数(负浮点数 + 0) 
"^((-/d+(/./d+)?)|(0+(/.0+)?))$"

// 负浮点数 
"^(-(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*)))$"

// 浮点数  
"^(-?/d+)(/./d+)?$"  

// 由 26 个英文字母组成的字符串 
"^[A-Za-z]+$" 

// 由 26 个英文字母的大写组成的字符串  
"^[A-Z]+$" 

// 由 26 个英文字母的小写组成的字符串  
"^[a-z]+$"  

// 由数字和 26 个英文字母组成的字符串 
"^[A-Za-z0-9]+$"  

// 由数字、26 个英文字母或者下划线组成的字符串 
"^/w+$"  

// email 地址 
"^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$"    

// url 
"^[a-zA-z]+://(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$"  

// 年-月-日 
"^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$" 

// 月/日/年
"^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$"

// Email   
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"   

// 电话号码 
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?"

// IP 地址
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$"   

// MAC 地址的正则表达式 
^([0-9A-F]{2})(-[0-9A-F]{2}){5}$   

// 值类型正则表达式
^[-+]?/d+(/./d+)?$ 

2、验证文本有效性
使用QRegExp::exactMatch来判断一个字符串是否符合一个pattern。

void testRegexMatch()  
{  
    QString pattern(".*=.*");  
    QRegExp rx(pattern);   
    bool match = rx.exactMatch("a=3");  
    qDebug() << match;                      // True    
    match = rx.exactMatch("a/2");  
    qDebug() << match;                      // False  
}  

3、提取数据
利用正则表达式从一个字符串里提取特定的字段或数据。例如,你可以用以下代码从"a=100"里提取"a"和"100"。

void testRegexCapture()  
{  
    QString pattern("(.*)=(.*)");  
    QRegExp rx(pattern);  
  
    QString str("a=100");  
    int pos = str.indexOf(rx);              // 0, position of the first match.  
                                            // Returns -1 if str is not found.  
                                            // You can also use rx.indexIn(str);  
    qDebug() << pos;  
    if ( pos >= 0 )  
    {  
        qDebug() << rx.matchedLength();     // 5, length of the last matched string  
                                            // or -1 if there was no match  
        qDebug() << rx.capturedTexts();     // QStringList("a=100", "a", "100"),  
                                            //   0: text matching pattern  
                                            //   1: text captured by the 1st ()  
                                            //   2: text captured by the 2nd ()  
  
        qDebug() << rx.cap(0);              // a=100, text matching pattern  
        qDebug() << rx.cap(1);              // a, text captured by the nth ()  
        qDebug() << rx.cap(2);              // 100,  
  
        qDebug() << rx.pos(0);              // 0, position of the nth captured text  
        qDebug() << rx.pos(1);              // 0  
        qDebug() << rx.pos(2);              // 2  
    }  
}   

4、修改文本
你可以把字符串中匹配的字符串替换成"一般字符串"。

QString s = "a=100";  
s.replace(QRegExp("(.*)="), "b=");  
qDebug() << s;                          // b=100  

QString s = "a=100";  
s.replace(QRegExp("(.*)=(.*)"), "\\1\\2=\\2");  // \1 is rx.cap(1), \2 is rx.cap(2)  
qDebug() << s;   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值