REGEXP: Ist es möglich, nach String 'String' zu suchen, aber nicht 'String ({' '

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

  •  19-09-2019
  •  | 
  •  

Frage

Ich versuche, alle Vorschläge meines konkreten Wortes (Methode Call mit veralteten API) in allen Dateien in einem Verzeichnis herauszufinden. Ich brauche einen Regexp, um alle solchen Vorschläge zu finden, die keinen aktualisierten Anruf (neue API) enthalten. Kannst du mir bitte helfen?

Beispiel:

  • Veraltete API: Methode (a, b, c)
  • Neue API: Methode ({A: a, b: b, c: c})

Das Regexp sollte alle Dateien finden, die "Methode" enthalten, aber nicht "Methode" ({".

Vielen Dank.

War es hilfreich?

Lösung

Ich würde sagen, der richtige Weg ist es, den negativen Look-Ahead-Operator zu verwenden. ?!

/method(?!\(\{)/

Die obigen Staaten sagen: "Jedes Auftreten von method das ist nicht gefolgt von ({"

Es erfüllt Ihre Anforderungen besser als die vorgeschlagenen /method([^{]/ Da letzteres nicht übereinstimmt, das String -Ende (dh abc abc method) und es handelt nicht mit der Kombination von zwei Zeichen ({ Das haben Sie sehr gut angefordert.

Andere Tipps

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) 

Erklären: [ ] Definiert eine Charakterklasse - dh der Charakter in dieser Position kann in der Klasse alles übereinstimmen.

Das ^ Als erster Charakter der Klasse ist eine Negation: Es bedeutet, dass diese Klasse jedem Charakter entspricht außer Die in dieser Klasse definierten Zeichen.

Das { Natürlich ist der einzige Charakter, der uns in diesem Fall nicht übereinstimmt.

In einigen method( gefolgt von einem Charakter außer {.

Es gibt andere Möglichkeiten, wie Sie dies stattdessen tun können:

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

\w In diesem Fall ist (vorausgesetzt das C -Gebietsschema) gleichwertig zu [0-9A-Za-z]. Wenn Sie einen optionalen Platz zulassen möchten, können Sie es versuchen:

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

(In Grep -Syntax, [:alnum:] is the same asw;:Platz:refers to any whitespace character - this is represented ass` In den meisten Regex -Implementierungen)

Sie können verwenden Charakterklassen a folgen {, z.B

/method\([^{]/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top