岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的VC中使用SCRIPT 正则写的LRC歌词分析类,希望大家看完后能赶快学习起来。
【 tulaoshi.com - 编程语言 】
#include "StdAfx.h"
#include ".lrcobject.h"
#include comdef.h
LRCOBJECT::LRCOBJECT(const char * text)
: ar(_T(""))
, by(_T(""))
, al(_T(""))
, ti(_T(""))
, oTime(0)
, isLrcFile(FALSE)
{
Text=text;
steLrcTi();
}
LRCOBJECT::LRCOBJECT(void)
{
}
LRCOBJECT::~LRCOBJECT(void)
{
Release();
}
// //查找添加LRC标题
void LRCOBJECT::steLrcTi(void)
{
CoInitialize(NULL);
try{
IRegExpPtr regExpPtr(__uuidof(RegExp));
regExpPtr-PutGlobal(VARIANT_TRUE);
regExpPtr-PutPattern("[ti:([^[]:]+)]");
IMatchCollectionPtr matches = regExpPtr-Execute((const char * )Text); //Execute方法接受的是_bstr_t类型,因此要进行(const char * )转换
ISubMatchesPtr pMatch;
if(matches-GetCount() 0 )
{
//IMatch2Ptr类型才有GetSubMatches()方法,因此,要进行显式的类型转换
pMatch=((IMatch2Ptr)matches-GetItem(0))-GetSubMatches();//SubMatches;
//pMatch-GetItem(0)返回是_variant_t类型,_variant_t类型的属性bstrVal是BSTR类型
ti= (pMatch-GetItem(0)).bstrVal;
}
//--------------------------------------------------
regExpPtr-PutPattern("[ar:([^[]:]+)]");
matches = regExpPtr-Execute((const char * )Text);
if(matches-GetCount()0)
{
pMatch=((IMatch2Ptr)matches-GetItem(0))-GetSubMatches();//SubMatches;
ar= (pMatch-GetItem(0)).bstrVal;
}
//-----------------------------------------
regExpPtr-PutPattern("[al:([^[]:]+)]");
matches = regExpPtr-Execute((const char * )Text); //用指针要出错
if(matches-GetCount()0)
{
pMatch=((IMatch2Ptr)matches-GetItem(0))-GetSubMatches();//SubMatches;
regExpPtr-PutPattern("[d+:[d.]+]");
matches = regExpPtr-Execute((const char * )Text); //用指针要出错
if(matches-GetCount()0)
{
isLrcFile=TRUE;
}
else
{
isLrcFile=FALSE;
}
pMatch=NULL;
matches=NULL;
regExpPtr=NULL;
//"[d+:[d.]+]"
}
//catch(_com_error& e)
//{
/
来源:http://www.tulaoshi.com/n/20160219/1625270.html
看过《VC中使用SCRIPT 正则写的LRC歌词分析类》的人还看了以下文章 更多>>