2017-03-15 4 views
2

浮動小数点型リテラルと一致するように単純なスクリプトを書いていますが、+123.23,-123.23または123.23などが一致する必要がありますので、-1.0e-10フォームと一致しません。ですから、私の表現は、[+-]?([0-9]*[.])?[0-9]+という単純なものです。この記号は、記号、数字、ドット、および分数を任意に捕捉します。そして、私のCの検証は次のようになります。C:正規表現が浮動小数点リテラルと一致しません

reti = regcomp(&regex, "[+-]?([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(&regex, testString, 0, NULL, 0); 
if (!reti) { 
    printf("%s \n", testString); 
} 

はしかし、RETIの値はテスト文字列「-87.21」の私の正規表現は失敗を意味し、1です。私はregexr.comで正規表現をテストしましたが、 "-87.21"にマッチします。だから、ここで何が起こるのか分かりません。助けることができる人はいますか?

+0

@chuxいいえ、問題ではありません。 –

+0

浮動小数点数のみを照合する場合は、ピリオド「。」が必須で、必須ではありません。 – DyZ

+2

@DYZ:ピリオドは浮動小数点リテラルではオプションです。ただし、期間の前後に少なくとも1桁は必須です。 OPの正規表現は、有効な '0'またはそれに類するものと一致しません。 –

答えて

3

あなたがregcompを呼び出すときREG_EXTENDEDフラグを追加したり、他のPOSIX BRE(基本正規表現、-Eなしsedgrepで使用される従来の構文)と互換性があるように、あなたの正規表現を適応させる必要があります。 BREはデフォルトであり、おそらくあなたが望むものではありません。

+0

ほとんどの場合、特定の文字列にマッチするだけで、私は0を私のフラグとして使うことができます。私はそれを使用する前にこれに気付かなければならない、感謝! –

+0

@LingboTangもし私が 're_format'マンページの権利を読んでいれば、あなたの正規表現はまだ動作しているはずです...しかし、私はそれをテストしていませんでした。 POSIX正規表現では、 '?'、 '*'、 '+'の代わりに '\\ {min - max \\}'を '' [+ - ] \\ { 0,1 \\} [0-9] \\ {0、\\} \\。\\ {0,1 \\} [0-9] \\ {1、\\} "'(怪物、私知って;]) – Siguza

+1

それはいくつかのより多くの問題です、私はちょうど私のための複雑さを処理するためのフラグを聞かせます。 –

関連する問題