0
^( *)((unsigned *int)|(int)) *[A-Za-z_][A-Za-z_0-9]* *; *((//)| *)

^ *(unsigned +)?int +[A-Za-z_][A-Za-z_0-9]* *;( *// *.*)?

正規表現が行うことになっているのは、予約済みキーワードのチェックを除いて、C で有効な int 宣言をフィルター処理することです。これまでのところ、unsigned 修飾子のみがサポートされています。しかし、トップとボトムの実装の違いは何ですか? 2 番目が 1 番目と一致しない場合はありますか? 最初は「正しい」参照です。

事例があれば教えてください。まずは自力で直そうと思います。

4

2 に答える 2

5

1 つ目は のような文字列に一致しますunsignedintiforgotaboutspaces;。2番目のものはそうではありません。

意図的に正規表現を終了しなかったと思います$。そうでない場合、マッチング エンジンが文字列全体を照合しようとすると、最初の文字列は一致int foo; //し (最後にスペースがありません)、2 番目の文字列は一致しません。

グループはすべて異なりますが、これはサムがすでに言ったことです。

それ以外は、多かれ少なかれ同じように機能するはずだと思います。

于 2013-05-23T20:44:59.913 に答える
1

いくつかの違い:

一般的に言えば、() は、正規表現に一致するとグループをキャプチャします (どの入力が括弧に一致したかを正確に知りたい場合)

最初のものは、実際に文字列にスペースを入れる必要もありません。

記号: 0 以上*を意味 します 記号: 1 以上を意味します
+

于 2013-05-23T20:46:42.687 に答える