ログファイルに次のような行があります。
11-test.domain1.com がログに記録されました ...
37-user1.users.domain2.org ログに記録されました ...
48-me.server.domain3.net ログに記録されました...
サブドメインなしで各ドメインを抽出するにはどうすればよいですか? "-" と "Logged" の間の何か。
C++ (Linux) で次のコードを使用していますが、うまく抽出できません。もちろん、いくつかの例があれば、抽出された文字列を返す関数は素晴らしいでしょう。
regex_t preg;
regmatch_t mtch[1];
size_t rm, nmatch;
char tempstr[1024] = "";
int start;
rm=regcomp(&preg, "-[^<]+Logged", REG_EXTENDED);
nmatch = 1;
while(regexec(&preg, buffer+start, nmatch, mtch, 0)==0) /* Found a match */
{
strncpy(host, buffer+start+mtch[0].rm_so+3, mtch[0].rm_eo-mtch[0].rm_so-7);
printf("%s\n", tempstr);
start +=mtch[0].rm_eo;
memset(host, '\0', strlen(host));
}
regfree(&preg);
ありがとうございました!
PS いいえ、この部分は他の人が作成したより大きな C プログラムの中にあるため、これに perl を使用することはできません。
編集:
コードを次のコードに置き換えます。
const char *p1 = strstr(buffer, "-")+1;
const char *p2 = strstr(p1, " Logged");
size_t len = p2-p1;
char *res = (char*)malloc(sizeof(char)*(len+1));
strncpy(res, p1, len);
res[len] = '\0';
サブドメインを含むドメイン全体を非常にうまく抽出しています。abc.def.domain.com から domain.com または domain.net だけを抽出するにはどうすればよいですか?
strtok は良いオプションですか、最後のドットを計算するにはどうすればよいですか?