正規表現 -- より使いやすく

戻る

::::::::::::::
regex-test.c
::::::::::::::
#include <stdio.h>
#include <regex.h>

/** $Id: regex2.html,v 1.1 2009/06/22 16:12:24 kishi Exp kishi $ */

char** getTokens( char* input, char* pattern, int count ) {

    int regsuccess;		
    regex_t reg;	
    regmatch_t match[ count ];	
    char **tokens = ( char ** ) malloc( count * sizeof( char * ) ) ;

    regcomp ( &reg, pattern, REG_EXTENDED );
    regsuccess = regexec ( &reg, input, count, match, 0 );
    regfree ( &reg );

    char **ptr = tokens;
    int i;
    for ( i = 0;i < count;i++ ) {

        int len = ( int ) ( match[ i ].rm_eo - match[ i ].rm_so + 1 );
        *ptr = ( char * ) malloc ( len + 1 );
        memset ( *ptr, 0, len );
        memcpy ( *ptr, input + match[ i ].rm_so, len - 1 );

        ++ptr;
    }

    return tokens;
}

int
main ( void ) {
    int i;

    char *str = "http://blogs.yahoo.co.jp/appaloosa_909/MYBLOG/guest.html";
    char *pattern = "http://([[:alnum:].~?&%#_=-\\:]+)(\\/?.*)";

    char** tokens = getTokens( str, pattern, 5 );
    for ( i = 0;i < 5;i++ ) {
        printf( "[%2d] %s\n", i, *tokens );
        ++tokens;
    }
    return 0;
}

■実行結果

[ 0] http://blogs.yahoo.co.jp/appaloosa_909/MYBLOG/guest.html
[ 1] blogs.yahoo.co.jp
[ 2] /appaloosa_909/MYBLOG/guest.html
[ 3] 
[ 4] 
戻る

inserted by FC2 system