正規表現パターンは、次のことを一致している必要がありますC - regexecはNOMATCHを返します。
abc_xyz_0
abc_1025_01.29.00_xyz_0
abc_0302_42.01.00_xyz_0
(ABCとXYZの間の数字は重要ではいけない)
だから、私はパース:
(abc_(\w+\.\d+\.\w+)?xyz_0)
マイコード:
をregex_t r;
unsigned int maxGroups = 3;
regmatch_t groupArray[maxGroups];
char * to_match = "abc_0302_02.01.00_xyz_18 abc_0302_02.01.00_xyz_16 abc_0302_02.01.00_xyz_14 abc_0302_02.01.00_xyz_0 abc_0302_02.01.00_xyz_10 abc_0302_02.01.00_xyz_2"
if (0 != regcomp(&r, "(abc_(\\w+\\.\\d+\\.\\w+)?xyz_0)", REG_EXTENDED))
{
//this does NOT get hit
printf("regcomp failed")
}
else if(regexec(r, to_match, maxGroups, groupArray, REG_EXTENDED) == 0)
{ *never gets here* }
else
{ printf("regexec returned non-zero(No Matches)\n"); }
regfree(&r);
だから私のg私は間違った正規表現を持っています(上で定義した私のケースではうまくいきます - regexpal.comを使って確認しています)か、何か紛失していますか?
いずれにしても、私は近いとわかっていて、助けていただければ幸いです。
これは 'abc(?:_ \ d + _ \ d +)?_ xyz_0'です。 – sln
@sln助けてくれて本当に感謝しています。 "?:"を追加すると、regcompが失敗します。 これは私のためには機能しませんでした。 (abc _(\?:\\ w + \\。\\ d + \\。\\ w +)?xyz_0) –