本文整理汇总了C++中MatchResult类的典型用法代码示例。如果您正苦于以下问题:C++ MatchResult类的具体用法?C++ MatchResult怎么用?C++ MatchResult使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MatchResult类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SearchKeysInFile
// 仅用来搜索关键字,结果保存在char* resultFile中
void SearchKeysInFile(const char* file,const char * keys,const char * resultFile)
{
// text
//char * text = "12.5, a1.1, 0.123, 178";
// declare
//static CRegexpT <char> regexp("\\b\\d+\\.\\d+");
//char * key=m_Keyword.GetBuffer();
static CRegexpT <char> regexp(keys);
CContext * pContext;
//读文件,分块查找
std::ifstream ifs;
ifs.open(file,ifstream::binary);
ifs.seekg(0,ifstream::beg);
std::ofstream ofs;
ofs.open(resultFile,ofstream::binary);
ofs.clear();
//ofs.seekg(0,ofstream::beg);
char * pBuffer=new char[BLOCK_SIZE];
while(!ifs.eof())
{
ifs.read(pBuffer,BLOCK_SIZE);
//////////////////////////////////////////////////////////////////////////
//分块查找
// prepare
pContext= regexp.PrepareMatch(pBuffer);
// loop
MatchResult result = regexp.Match(pContext);
while( result.IsMatched() )
{
// 写入结果文件
// printf("%.*s\n", result.GetEnd() - result.GetStart(), pBuffer + result.GetStart());
// 先转换,再写入
ofs.write(pBuffer + result.GetStart(),result.GetEnd() - result.GetStart());
ofs<<endl;
ofs<<"——————————————————————"<<endl;
// get next
result = regexp.Match(pContext);
}
}
// 搜索成功结束
ifs.close();
ofs.close();
// release
regexp.ReleaseContext(pContext);
delete[] pBuffer;
}
示例2: endMatch
/**
* Method handling the end of a match
* @return MatchResult : result of the match
*/
void Championship::endMatch(MatchResult & result)
{
// erase schedule
for(size_t i = 0;i<_schedules.size();++i){
if(_schedules[i].user1 == result.getWinner() || _schedules[i].user2 == result.getWinner()){
_schedules.erase(_schedules.begin()+i);
}
}
// erase loser
for(size_t i =0;i<_users.size();++i){
if(_users[i] == result.getLoser()){
_users.erase(_users.begin()+i);
}
}
// check if championship ended
if(_users.size() == 1){
_isEnded = true;
}
// check if turn ended
else if(_users.size() == _nbOfUsers/(2<<(_turn-1))) { //or _schedules.empty() but less safe
_turnsResult.push_back(_users);
++_turn;
time_t currentTime = time(NULL);
struct tm* date = localtime(¤tTime);
date->tm_min +=1;
time_t begin = mktime(date);
for (size_t i = 0; i < _users.size(); i+=2){
_schedules.push_back(Schedule(_users[i], _users[i+1], begin));
}
MemoryAccess::save(*this);
}
}
示例3: TEST_F
TEST_F(MatchResultTest, AuthorRulesMultipleScopes)
{
const StylePropertySet* authorSets[] = { propertySet(0), propertySet(1), propertySet(2), propertySet(3) };
MatchResult result;
result.finishAddingUARules();
result.addMatchedProperties(authorSets[0]);
result.addMatchedProperties(authorSets[1]);
result.finishAddingAuthorRulesForTreeScope();
result.addMatchedProperties(authorSets[2]);
result.addMatchedProperties(authorSets[3]);
result.finishAddingAuthorRulesForTreeScope();
testMatchedPropertiesRange(result.allRules(), 4, authorSets);
testMatchedPropertiesRange(result.uaRules(), 0, nullptr);
testMatchedPropertiesRange(result.authorRules(), 4, authorSets);
ImportantAuthorRanges important(result);
auto iter = important.begin();
EXPECT_NE(important.end(), iter);
testMatchedPropertiesRange(*iter, 2, &authorSets[2]);
++iter;
EXPECT_NE(important.end(), iter);
testMatchedPropertiesRange(*iter, 2, authorSets);
++iter;
EXPECT_EQ(important.end(), iter);
}
示例4: stepMatches
MatchResult StepManager::stepMatches(const std::string &stepDescription) {
MatchResult matchResult;
for (steps_type::iterator iter = steps().begin(); iter != steps().end(); ++iter) {
StepInfo *stepInfo = iter->second;
SingleStepMatch currentMatch = stepInfo->matches(stepDescription);
if (currentMatch) {
matchResult.addMatch(currentMatch);
}
}
return matchResult;
}
示例5: test_all_number
int test_all_number( const char *string )
{
//declare
static CRegexpT <char> regexp("\\d+");
//test
MatchResult result = regexp.MatchExact( string );
//matched or not
return result.IsMatched();
}
示例6:
bool Foam::regExp::match(const std::string& str) const
{
bool isExactMatch = false;
if (preg_ && !str.empty())
{
const MatchResult result = preg_->MatchExact(str.c_str());
isExactMatch = (0 < result.IsMatched());
}
return isExactMatch;
}
示例7: regexp
CString CCommands::XApplicationEvents::ReplaceRegexpData( IN CString Data, IN LPCTSTR lpRegexp, IN DWORD dwRegexpType, IN LPCTSTR lpRegexpReplace )
{
CRegexpT <TCHAR> regexp(lpRegexp, dwRegexpType);
CString strRetData;
MatchResult result = regexp.Match(Data);
if (result.IsMatched())
{
TCHAR * cReplace = regexp.Replace(Data, lpRegexpReplace);
strRetData = cReplace;
regexp.ReleaseString(cReplace);
}
return strRetData;
}
示例8: while
typename Dictionary<Entry>::MatchResult Dictionary<Entry>::match( const KyteaString & chars ) const {
const unsigned len = chars.length();
unsigned currState = 0, nextState;
MatchResult ret;
for(unsigned i = 0; i < len; i++) {
KyteaChar c = chars[i];
while((nextState = states_[currState]->step(c)) == 0 && currState != 0)
currState = states_[currState]->failure;
currState = nextState;
std::vector<unsigned> & output = states_[currState]->output;
for(unsigned j = 0; j < output.size(); j++)
ret.push_back( std::pair<unsigned, Entry*>(i, entries_[output[j]]) );
}
return ret;
}
示例9: mapResultValue
void TestPatternMatcherContext::joinResult( MatchResult& result, unsigned int id, const MatchResult& aresult)
{
if (!result.defined())
{
result.ordpos = aresult.ordpos;
result.ordlen = aresult.ordlen;
result.start = aresult.start;
result.end = aresult.end;
}
else
{
if (aresult.ordpos + aresult.ordlen > result.ordpos + result.ordlen)
{
result.ordlen = aresult.ordpos + aresult.ordlen - result.ordpos;
}
if (aresult.start < result.start)
{
result.start = aresult.start;
}
if (aresult.end > result.end)
{
result.end = aresult.end;
}
}
const char* variable = m_instance->getVariableAttached( id);
if (variable)
{
std::string value = mapResultValue( id, aresult);
result.items.push_back( new MatchResult( variable, value, aresult.ordpos, aresult.ordlen, aresult.start, aresult.end));
}
else
{
result.items.insert( result.items.end(), aresult.items.begin(), aresult.items.end());
}
}
示例10: critical
int Specialization::substituteConstArrayIndexExprsWithConst(VariableIdMapping* variableIdMapping, ExprAnalyzer* exprAnalyzer, const EState* estate, SgNode* root) {
typedef pair<SgExpression*,int> SubstitutionPair;
typedef list<SubstitutionPair > SubstitutionList;
SubstitutionList substitutionList;
AstMatching m;
MatchResult res;
int numConstExprElim=0;
#pragma omp critical(EXPRSUBSTITUTION)
{
res=m.performMatching("SgPntrArrRefExp(_,$ArrayIndexExpr)",root);
}
if(res.size()>0) {
for(MatchResult::iterator i=res.begin();i!=res.end();++i) {
// match found
SgExpression* arrayIndexExpr=isSgExpression((*i)["$ArrayIndexExpr"]);
if(arrayIndexExpr) {
// avoid substituting a constant by a constant
if(!isSgIntVal(arrayIndexExpr)) {
list<SingleEvalResultConstInt> evalResultList=exprAnalyzer->evalConstInt(arrayIndexExpr,*estate,true, true);
// only when we get exactly one result it is considered for substitution
// there can be multiple const-results which do not allow to replace it with a single const
if(evalResultList.size()==1) {
list<SingleEvalResultConstInt>::iterator i=evalResultList.begin();
ROSE_ASSERT(evalResultList.size()==1);
AValue varVal=(*i).value();
if(varVal.isConstInt()) {
int varIntValue=varVal.getIntValue();
//cout<<"INFO: const: "<<varIntValue<<" substituting: "<<arrayIndexExpr->unparseToString()<<endl;
SgNodeHelper::replaceExpression(arrayIndexExpr,SageBuilder::buildIntVal(varIntValue),false);
numConstExprElim++;
}
}
}
}
}
}
return numConstExprElim;
}
示例11: TEST_F
TEST_F(MatchResultTest, UARulesAndAuthorRulesMultipleScopes) {
const StylePropertySet* allSets[] = {propertySet(0), propertySet(1),
propertySet(2), propertySet(3),
propertySet(4), propertySet(5)};
const StylePropertySet** uaSets = &allSets[0];
const StylePropertySet** authorSets = &allSets[2];
MatchResult result;
result.addMatchedProperties(uaSets[0]);
result.addMatchedProperties(uaSets[1]);
result.finishAddingUARules();
result.addMatchedProperties(authorSets[0]);
result.addMatchedProperties(authorSets[1]);
result.finishAddingAuthorRulesForTreeScope();
result.addMatchedProperties(authorSets[2]);
result.addMatchedProperties(authorSets[3]);
result.finishAddingAuthorRulesForTreeScope();
testMatchedPropertiesRange(result.allRules(), 6, allSets);
testMatchedPropertiesRange(result.uaRules(), 2, uaSets);
testMatchedPropertiesRange(result.authorRules(), 4, authorSets);
ImportantAuthorRanges important(result);
ImportantAuthorRangeIterator iter = important.begin();
EXPECT_NE(important.end(), iter);
testMatchedPropertiesRange(*iter, 2, &authorSets[2]);
++iter;
EXPECT_NE(important.end(), iter);
testMatchedPropertiesRange(*iter, 2, authorSets);
++iter;
EXPECT_EQ(important.end(), iter);
}
示例12: Str_RegExMatch
int Str_RegExMatch( LPCTSTR pPattern, LPCTSTR pText, TCHAR * lastError )
{
try
{
CRegexp expressionformatch(pPattern, NO_FLAG);
MatchResult result = expressionformatch.Match(pText);
if( result.IsMatched() )
return 1;
return 0;
}
catch (std::bad_alloc e)
{
strcpylen(lastError,e.what(),SCRIPT_MAX_LINE_LEN);
CurrentProfileData.Count(PROFILE_STAT_FAULTS, 1);
return -1;
}
catch ( ... )
{
strcpylen(lastError,"Unknown",SCRIPT_MAX_LINE_LEN);
CurrentProfileData.Count(PROFILE_STAT_FAULTS, 1);
return -1;
}
}
示例13: Matches
Pattern* XRefDef::Matches(PatternList* list, const char* s, const char** start, int32* len) {
MatchResult m;
const int32 n = list->CountItems();
Pattern* pat = NULL;
for (int32 i = 0; i < n; i++) {
Pattern* p = list->ItemAt(i);
if (p->Matches(s, &m) && m.CountResults() >= 1) {
if (m.Start(0) <= s) {
if (m.Start(0) == s && m.Length(0) <= *len) continue;
pat = p;
*start = m.Start(0);
*len = m.Length(0);
}
}
}
return pat;
}
示例14: success_response
mValue StepMatchesCommand::formatResponse(MatchResult matchResult) {
mValue response = success_response();
mArray matches;
MatchResult::match_results_type resultSet = matchResult.getResultSet();
for (MatchResult::match_results_type::iterator i = resultSet.begin(); i != resultSet.end(); ++i) {
mObject match;
const StepInfo *stepInfo = i->stepInfo;
match.insert(make_pair("id", mValue(toString(stepInfo->id))));
mArray matchArgs;
for (SingleStepMatch::submatches_type::iterator j = i->submatches.begin(); j != i->submatches.end(); ++j) {
mObject arg;
arg.insert(make_pair("val", mValue(j->value)));
arg.insert(make_pair("pos", mValue(j->position)));
matchArgs.push_back(arg);
}
match.insert(make_pair("args", mValue(matchArgs)));
match.insert(make_pair("source", mValue(stepInfo->source)));
matches.push_back(match);
}
response.get_array().push_back(matches);
return response;
}
示例15: main
int main(int argc, char * argv[])
{
std::ifstream fs("C:\\Lookup\\112.127.141.86.html");
std::string in;
load_file(in, fs);
fs.close();
//static CRegexpT <char> regexp1("\\d+");
static CRegexpT <char> regexp1("target=\\\"_blank\\\"\\>(.+?)\\</a\\>\\</td\\>");
// loop
MatchResult result1 = regexp1.Match(in.c_str());
while( result1.IsMatched() )
{
//GetEnd匹配成功后,获取所匹配到的子字符串的结束位置。如果匹配失败,则返回负值。
//GetStart匹配成功后,获取所匹配到的子字符串的开始位置。如果匹配失败,则返回负值。
printf("%.*s\n", result1.GetEnd() - result1.GetStart(), in.c_str() + result1.GetStart());
// get next
result1 = regexp1.Match(in.c_str(), result1.GetEnd()); //返回匹配结果 MatchResult 对象。
// 通过 MatchResult 对象,可以得知是否匹配成功。如果成功,通过 MatchResult 对象可以获取捕获信息。
}
// text
char * text = "http://www.cppprog.com/2009/0112/48.html";
// declare
static CRegexpT <char> regexp("\\d+");
// loop
MatchResult result = regexp.Match(text);
//IsMatched返回非零值表示匹配成功,返回 0 表示匹配失败。
while( result.IsMatched() )
{
//GetEnd匹配成功后,获取所匹配到的子字符串的结束位置。如果匹配失败,则返回负值。
//GetStart匹配成功后,获取所匹配到的子字符串的开始位置。如果匹配失败,则返回负值。
printf("%.*s\n", result.GetEnd() - result.GetStart(), text + result.GetStart());
// get next
result = regexp.Match(text, result.GetEnd()); //返回匹配结果 MatchResult 对象。
// 通过 MatchResult 对象,可以得知是否匹配成功。如果成功,通过 MatchResult 对象可以获取捕获信息。
}
return 0;
}