私はCでいくつかの正規表現を試していました。つまり、テキストファイルの行を処理しようとしていました:
MY NAME IS ;;JOHN
私はsscanfのフォーマットパラメータで使用sscanf
して一致させていました。これをRubular%s %s %s %[^;]
でテストすると(つまり、「あなたの正規表現:」フィールドと「テスト文字列:」フィールドに入力します)、データと一致します。[^;]
;;test
test
ただし、次の行で
sscanf("MY NAME IS ;;JOHN", "%s %s %s %[^;], str1, str2, str3, str4)
、
4 番目の文字列str4
は実際には一致しません。つまり、 をsscanf
返します3
。私の知る限り、正規表現[^;]
はセミコロン以外の任意の文字にsscanf
一致し;;JOHN
ます。
これは単に の問題sscanf
ですか、それとも glibc は何らかの理由で正規表現を別の方法で行うのでしょうか? sscanf
文字列の最初の文字が実際にセミコロンであるため、4 番目の文字列との一致に失敗しているため、文字列と正確に一致することはできませんか? それが3を返す理由ですか?
さらに、次のような行がMY NAME IS DOE;;JOHN
あり、 を使用するsscanf
と、関数は 4 を返します。