正規表現:別々の部分文字列を持つ文字列を検索する

正規表現:別々の部分文字列を持つ文字列を検索する

私のコードで無効なパラメータを持つすべての文字列を見つけたいのですが。これが私がしたいことです:

次のすべての項目を探します。

CreateNewPoint(CorrectPoint.X, IncorrectPoint.Y, other_parameters)
CreateNewPoint(IncorrectPoint.X, CorrectPoint.Y, other_parameters)

次の項目をすべて無視します。

CreateNewPoint(CorrectPoint.X, CorrectPoint.Y, other_parameters)

私の例では変数名を使用していますが、CorrectPointこれはIncorrectPoint何でも構いません。

私は次のことを考えています:

CreateNewPoint(\(.*\)\.X, \1\.Y, .*)

しかし、私は同じ変数名を使用しますが、異なる変数名を使用する行には興味がありません。

答え1

grepフラグと一緒に使用する-PPATTERNPerl正規表現として解釈されました」)、あなたはそれを使用することができます否定的な予測

grep -P 'CreateNewPoint\((.*)\.X, ((?!\b\1\b).)*\.Y, .*\)' /tmp/codefile
  • (?!\b\1\b)次の項目は、単語の境界で囲まれた以前に一致した単語にすることはできません(を使用すると、\b文字列が見つからない可能性があります)。含む最初のゲームではありませんが、まったく同じそれに。
  • ((?!\b\1\b).)*- 次の内容も一致させたいので、すべての文字を確認し(単語と一致しないことを確認して)、一致させるように指示しなければなりません\.Y, .*\)grep\.Y

vimを使用して同様の一致を実行できます/CreateNewPoint(\(.*\)\.X, \(\(\<\1\.\)\@!.\)*\.Y, .*)grepいくつかの例外を除いて、正規表現に似ています。

  • \@!負の予測識別子です。
  • \<単語の始まりです(\b単語の境界ではありません)。
  • 終わりに単語の境界ではなく、点で終わることができないという意味です\.

関連情報