浮動小数点型リテラルと一致するように単純なスクリプトを書いていますが、+123.23
,-123.23
または123.23
などが一致する必要がありますので、-1.0e-10
フォームと一致しません。ですから、私の表現は、[+-]?([0-9]*[.])?[0-9]+
という単純なものです。この記号は、記号、数字、ドット、および分数を任意に捕捉します。そして、私のCの検証は次のようになります。C:正規表現が浮動小数点リテラルと一致しません
reti = regcomp(®ex, "[+-]?([0-9]*[.])?[0-9]+", 0);
if (reti) {
fprintf(stderr, "Could not compile regex of floating literals\n");
exit(1);
}
char * testString = "-87.21";
reti = regexec(®ex, testString, 0, NULL, 0);
if (!reti) {
printf("%s \n", testString);
}
はしかし、RETIの値はテスト文字列「-87.21」の私の正規表現は失敗を意味し、1です。私はregexr.comで正規表現をテストしましたが、 "-87.21"にマッチします。だから、ここで何が起こるのか分かりません。助けることができる人はいますか?
@chuxいいえ、問題ではありません。 –
浮動小数点数のみを照合する場合は、ピリオド「。」が必須で、必須ではありません。 – DyZ
@DYZ:ピリオドは浮動小数点リテラルではオプションです。ただし、期間の前後に少なくとも1桁は必須です。 OPの正規表現は、有効な '0'またはそれに類するものと一致しません。 –