0

C の posix 正規表現に問題があります。文字列が英数字であることを確認したいだけです (かなり簡単です) が、アンカーを追加しようとするたびに問題が発生します。正規表現はありますchar pattern[20] = "^[a-zA-Z0-9]+$";が、プログラムと照合しようとすると、一致し char* str = "9abc1";ないことが通知されます。私も^[[:alnum:]]+$同様の問題で試しました。私は正規表現の構文をいじり続けていますが、一致させることができたときにハイフンを追加すると、間違った結果が得られます (特にハイフンが最後にある場合は、あってはならない場所に一致します)。明らかに、私はいくつかの基本的な構文エラーを犯していますが、それを理解できないようです。何かアドバイス?

4

1 に答える 1

3

設定していますREG_EXTENDEDか?これは私にとってはうまくいきます:

#define _POSIX_C_SOURCE 200809L

#include <stdio.h>
#include <stdlib.h>
#include <regex.h>

int main(void) {
    regex_t rtype;

    int i = regcomp(&rtype, "^[a-zA-Z0-9]+$", REG_NOSUB | REG_EXTENDED);
    if ( i == 0 ) {
        printf("Regex compiled successfully.\n");
    } else {
        printf("Regex did not successfully compile.\n");
        return EXIT_FAILURE;
    }

    i = regexec(&rtype, "9abc1", 0, NULL, 0);
    if ( i == 0 ) {
        printf("Matched regex.\n");
    } else {
        char buffer[1000];
        regerror(i, &rtype, buffer, sizeof(buffer));
        printf("Regex error: %s\n", buffer);
    }

    return EXIT_SUCCESS;
}

と利回り:

paul@local:~/src/c/scratch/$ ./regextest
Regex compiled successfully.
Matched regex.

+量指定子は POSIX の基本的な正規表現構文には存在しません。これが原因である可能性があります。

于 2013-09-17T03:47:07.150 に答える