• 5411阅读
  • 3回复

[提问]跪求C++正则达人 [复制链接]

上一主题 下一主题
离线hats
 

只看楼主 倒序阅读 楼主  发表于: 2012-03-09
一个字符串QString str = "Hello 3-9-2012 World 2-23-2012 12-23-2011 Tom 2012-1-9";
可以看到日期的格式为 月-日-年,现在我想把格式换成年-月-日,
用php的写法如下
  1. <?php
  2. $str = "Hello 3-9-2012 World 2-23-2012 12-23-2011 Tom 2012-1-9";
  3. $str = preg_replace('#(\d{1,2})-(\d{1,2})-(\d{4})#','${3}-${1}-${2}',$str);//${3},${1},${2}为匹配的原字符串顺序
  4. echo $str;
  5. ?>
php正则输出结果为 Hello 2012-3-9 World 2012-2-23 2011-12-23 Tom 2012-1-9


但是这个代码用C++正则方式却不知道怎么写,C++的正则好像不认${2},${1}这种方式。
请教达人这个C++的正则该怎么写啊?
VC2005 + Qt 4.7.0
VC6 + Qt 4.5.0
WIndows XP
Mac OS X 10.6.8
CentOS6.2
离线copyleft_x
只看该作者 1楼 发表于: 2012-03-09
印象中,不同语言的正则虽然基本规律类似,不过细节有所差别,建议查阅相关手册。
稍微翻了下QString、QRegExp的相关内容,下面的写法大体可以解决上述问题。

#include<QDebug>
#include<QRegExp>

int main(int argc, char* argv[])
{
    QString str("Hello 3-9-2012 World 2-23-2012 12-23-2011 Tom 2012-1-9");
    qDebug()<<str.replace(QRegExp("(\\d{1,2})-(\\d{1,2})-(\\d{4})"), "\\3-\\1-\\2");
    return 0;
}
离线dbzhang800

只看该作者 2楼 发表于: 2012-03-09
不妨先看一眼 QRegExp 和 QString 的manual

这种 backreference,QString::replace 什么的,都是几乎现成的例子。
离线hats

只看该作者 3楼 发表于: 2012-03-09
回 1楼(copyleft_x) 的帖子
谢谢老大
VC2005 + Qt 4.7.0
VC6 + Qt 4.5.0
WIndows XP
Mac OS X 10.6.8
CentOS6.2
快速回复
限100 字节
 
上一个 下一个