在运行时创建函数或调度右函数

时间:2013-07-18 12:59:47

标签: c++ function runtime

我有一种情况我不知道如何准确定义它。 我有正则表达式函数,允许我从文本中提取特定模式: 我总共有9个功能:

bool extractDate(const char *);
bool extractHeureFax(const char*);
bool extractFaxPhone(const char*);
bool extractFormePolitesse(const char*);
bool extractCodePostal(const char*);
bool extractDate2(const char*);
bool extractTelephone2(const char*);
bool extractNumbers(const char*);
bool extractalphanumeric(const char*);
bool extractnumeric(const char*);
bool extractPageNumber(const char*);

问题在于,每次他们想要添加正则表达式时,他们都必须修改整体 CODE ,这不是一个好主意。

他们的解决方案之一是将所有正则表达式放在文本文件中。所以每一次 他们想要添加一个新的正则表达式,他们可以将它添加到文本文件中,并在运行时加载它们。 文本中的每个正则表达式都包含ID和RE 示例:

DATE: ^([0]?[1-9]|[1|2][0-9]|[3][0|1])([\\.\\-\\/\\ ])([0]?[1-9]|[1][0-2])([\\.\\-\\/\\ ])([0-9]{4}|[0-9]{2})$
HEURE: ([0-1][0-9]|[2][0-3]):([0-5][0-9])$
TELEPHONE: ^(01|02|03|04|05|06|08)(([\\.\\-\\/\\ ])?[0-9][0-9]){4}
FORMULE POLITESSE: ^((c|C)ordialement|Sinc(è|\u00E8)rement|Sinc(è|\u00E8)re|croire|agr(é|\u00E9)er|agreer|l'expression|distingu(é|\u00E9)s|sentiments|salutations|consid(e|é|\u00E9)ration)$
CODE POSTAL: ^((0[1-9])|([1-8][0-9])|(9[0-8])|(2A)|(2B))[0-9]{3}$

然后将文本保存在矢量中并尝试所有正则表达式,直到找到正确的表达式。

代码内部: 这就是我处理函数的方式

                    if(extractDate(e->getName().c_str()))
                    {

                        e->setType(0);

                    }

                    else if(extractHeureFax(e->getName().c_str()))
                    {

                        e->setType(1);
                        //  int x0 = e->getXCenter();
                        //  int y0 = e->getYCenter();
                        //  markPoints(xmlFile,x0,y0,20,0,255,0);
                    }
                    //TELEPHONE = BLEU
                    else if(extractFaxPhone(e->getName().c_str()))
                    {
                        e->setType(2);

                    }

                    else if(extractCodePostal(e->getName().c_str()))
                    {
                        e->setType(3);

                    }

ExtractDAte(),ExtractHeureFax()等..是正则表达式函数:

bool Keywords::extractCodePostal(const char * code)
{
    // cout <<"code postal"<<endl;
    const boost::regex e("^((0[1-9])|([1-8][0-9])|(9[0-8])|(2A)|(2B))[0-9]{3}$");
    return boost::regex_match(code,e);
}///end function


bool Keywords::extractDate2(const char*date2)
{
    const boost::regex e("((j|J)anvier|(f|F)\u00E9vrier|(f|F)évrier|(f|F)evrier|(m|M)ars|(a|A)vril|(m|M)ai|(j|J)uin|(j|J)uillet|juillet|(a|A)o\u00FBt|(a|A)oût|aout|(s|S)eptembre|(o|O)ctobre|(n|N)ovembre|(d|D)\u00E9cembre|(d|D)écembre|(d|D)ecembre|JANVIER|FEVRIER|MARS|AVRIL|MAI|JUIN|JUILLET|AOUT|SEPTEMBRE|OCTOBRE|NOVEMBRE|DECEMBRE)");
    return boost::regex_match(date2,e);
}///end function

enter image description here

0 个答案:

没有答案