文字列処理

文字列の正規表現マッチの判定をしたい場合,C++11以降は標準ライブラリで正規表現を使うことができる.それ以前の場合,POSIX準拠の標準ライブラリに regex.h があり,これを利用することができる.

#include <iostream>
#include <regex.h>
using namespace std;

int main()
{
    string line1="   1   4.3";
    string line2="   A   4.3";
    string line3="       0.3";
    const char regex[]="^[[:blank:]]+[0-9][^.]";
    regex_t buffer;
    regcomp(&buffer,regex,REG_EXTENDED|REG_NEWLINE);
    regmatch_t patternMatch[1];
    int size=sizeof(patternMatch)/sizeof(regmatch_t);
    if(regexec(&buffer,line1.c_str(),size,patternMatch,0)==0)
    {
        cout<<"line 1: Match suru."<<endl;
    }
    if(regexec(&buffer,line2.c_str(),size,patternMatch,0)!=0)
    {
        cout<<"line 2: Match shinai."<<endl;
    }
    if(regexec(&buffer,line3.c_str(),size,patternMatch,0)!=0)
    {
        cout<<"line 3: Match shinai."<<endl;
    }
    regfree(buffer);
}

文字列を指定した文字で分割したい場合は strtok() を用いる.

#include <iostream>
#include <cstdlib>
#include <regex.h>
#include <cstring>
using namespace std;
 
int main()
{
	string line="The quick brown fox jumps over the lazy dog.";
	char *cline=(char*)malloc(sizeof(char)*(line.length()+1));
	strcpy(cline,line.c_str());
	char *tok;
	char del[]=" ";
	tok=strtok(cline,del);
	while(tok!=NULL)
	{
		cout<<tok<<endl;
		tok=strtok(NULL,del);
	}
}
このエントリーをはてなブックマークに追加

Site search

ページのトップへ戻る