4

私は正規表現にかなり慣れていないので、C ソース ファイル内の関数と関数呼び出しを検出する肯定的な先読みを使用して、次の単純な正規表現を作成しました。

\w+(?=\s*\()

正常に動作しますが、問題はif()while()などの関数以外の構文も検出することです。これは、次のように言うことで簡単に回避できます-

(if(?!\()) | (while(?!\())

しかし問題は、2 番目の正規表現を最初の正規表現と組み合わせる方法です。私はそれらを傾けるORことができません.最初のものはまだ一致if()while()ていORます.

これらの正規表現を組み合わせる方法、またはif()while()

PS:正規表現をテストするために次のツールを使用します

Gスキナー

正規表現パル

4

1 に答える 1

4

正規表現を使用して C で関数呼び出しを検索する場合、かなり多くの仮定があります。それはさておき、一致したもの (一致しない有効な関数呼び出しがある) に満足し、結果リストから除外ifしたいwhile場合は、次の正規表現を使用できます。

(?!\b(if|while|for)\b)\b\w+(?=\s*\()

正規表現は単語境界を使用して、名前全体が一致することを確認し ( in\bの部分的な一致を防ぎます)、名前全体がキーワードではないことを確認します (の拒否を防ぎます)。hilewhilewhilenothinghappens

于 2012-07-16T08:44:58.483 に答える