regexp: "string 'ではなく文字列「文字列」を検索することは可能ですか({'

StackOverflow https://stackoverflow.com/questions/2040923

  •  19-09-2019
  •  | 
  •  

質問

ディレクトリ内のすべてのファイルで、具体的な単語のすべての発生(偏向APIを使用したメソッド呼び出し)を見つけようとしています。更新された呼び出し(新しいAPI)を含まないすべてのそのような発生を見つけるためにRegexpが必要です。助けてくれませんか?

例:

  • 非推奨API:方法(a、b、c)
  • 新しいAPI:メソッド({a:a、b:b、c:c})

regexpは、「メソッド」を含むが「メソッド」({'」を含むすべてのファイルを見つける必要があります。

ありがとうございました。

役に立ちましたか?

解決

適切な方法は、ネガティブルックアヘッドオペレーターを使用することだと思います。 ?!

/method(?!\(\{)/

上記の状態、「任意の発生 method あれは いいえ に続く ({"

それはあなたの要件を提案されたよりもよく満たしています /method([^{]/ 後者は文字列の終わりと一致しないため(つまり abc abc method)そして、それは2つの文字の組み合わせを処理しません ({ あなたが非常にうまく要求したこと。

他のヒント

betelgeuse:tmp james$ echo " method(a,b,c) "> test1
betelgeuse:tmp james$ echo " method(a,b,c) " > test3
betelgeuse:tmp james$ echo " method({a:a, b:b, c:c})" > test2
betelgeuse:tmp james$ grep "method([^{]" test*
test1: method(a,b,c) 
test3: method(a,b,c) 

説明する: [ ] キャラクタークラスを定義します - つまり、この位置のキャラクターはクラス内のすべてのものと一致します。

^ クラスの最初のキャラクターは否定です。それは、このクラスがあらゆるキャラクターと一致することを意味します を除外する このクラスで定義されたキャラクター。

{ もちろん、この場合に一致しないことを気にする唯一のキャラクターです。

したがって、一部の場合、これは文字を持っている任意の文字列と一致します method( 任意のキャラクターが続きます を除外する {.

代わりにこれを行う他の方法があります:

betelgeuse:tmp james$ grep "method(\w" test*
test1: method(a,b,c) 
test3: method(a,b,c)

\w この場合、(Cロケールを仮定)に相当します [0-9A-Za-z]. 。オプションのスペースを許可したい場合は、次のことを試すことができます。

betelgeuse:tmp james$ grep "method([[:alnum:][:space:]]" test*
test1: method(a,b,c) 
test3: method( a, b, c) 
betelgeuse:tmp james$ 

(grep構文で、 [:alnum:] is the same asw;:スペース:refers to any whitespace character - this is represented asほとんどの正規表現の実装で s`)

使用できます キャラクタークラス 除外する 続く {, 、例:

/method\([^{]/
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top