Was bewirkt "*" in regulären Ausdrücken?

8

Mein Java-Quellcode:

%Vor%

Die Ausgabe ist: ee1e2e3e . Warum?

    
JSON 03.02.2009, 14:24
quelle

3 Antworten

21

'*' bedeutet null oder mehr Übereinstimmungen des vorherigen Zeichens. So wird jeder leere String durch ein "e" ersetzt.

Wahrscheinlich möchten Sie stattdessen "+" verwenden:

  

replaceAll("B+", "e")

    
Anders Westrup 03.02.2009, 14:27
quelle
7

Sie wollen dies für Ihr Muster:

%Vor%

Und Ihr Code wäre:

%Vor%

Das "*" entspricht "Null oder mehr" - und "Null" enthält das Nichts, das vor dem B ist, sowie zwischen allen anderen Zeichen.

    
Daniel Schaffer 03.02.2009 14:28
quelle
1

Ich habe über einen Monat bei einem großen Technologieunternehmen gearbeitet, indem ich einen Bug mit * (splat!) in regulären Ausdrücken behoben habe. Wir haben ein wenig bekanntes UNIX-Betriebssystem beibehalten. Mein Kopf explodierte fast, weil er ZERO-Vorkommen einer Begegnung mit einem Charakter entspricht. Sprechen Sie über einen harten Bug, den Sie durch Ihre eigenen Nachbildungen verstehen können. Wir waren in einigen Fällen doppelt substituierend. Ich konnte nicht herausfinden, warum der Code falsch war, aber ich konnte Code hinzufügen, der den speziellen (falschen) Fall auffing und Double Subbing verhinderte und keine der Utilities, die ihn beinhalteten (einschließlich sed und awk), kaputt machte. Ich war stolz, diesen Fehler behoben zu haben, aber wie bereits erwähnt.

Um Gottes willen, benutze einfach + !!!!

    
tkotitan 03.02.2009 15:55
quelle

Tags und Links