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