Begrenzen Sie die Anzahl der Ziffern in Regex

8

Ich habe eine solche Regex:

%Vor%

Es stimmt mit den folgenden Zeichenfolgen überein:

%Vor%

Ich möchte die Anzahl der Ziffern in dieser Regex auf 8 begrenzen.

Versucht dies:

%Vor%

Es hat aufgehört, irgendetwas zu finden.

Was mache ich falsch?

    
Jahongir Rahmonov 11.06.2015, 09:20
quelle

6 Antworten

5
%Vor%

Bedeutet nichts. Die Engine passt es wörtlich an und Ihre Regex ist fehlgeschlagen.

Verwenden Sie

%Vor%

Keine Leerzeichen in {}

    
vks 11.06.2015, 09:25
quelle
5

Das {} hat drei Formen:

  • {N} für eine festgelegte Anzahl von Zeit
  • {M,} für mindestens M mal
  • {N,M} für zwischen N und M Zeiten.

Wenn Sie den letzten verwenden, ist das Minimum obligatorisch.

Ändern Sie Ihre Regex in \d{1,8} , um zwischen 1 und 8 mal eine Ziffer zu finden

Beginnen Sie mit 1, wie Sie + verwendet haben, was eine Verknüpfung für {1,}

ist     
Tensibai 11.06.2015 09:27
quelle
4

Sehen Sie sich an, was regex101.com sagt:

Sie können den Begrenzungsquantor {1,8} verwenden, der 1 bis 8 Ziffern entspricht. Ich sehe, dass es mindestens 1 geben muss, da du + in deiner ursprünglichen Regex hast.

%Vor%

Siehe Demo

Aus der regulary-expressions.info :

  

Die Syntax lautet {min,max} , wobei min null oder eine positive Ganzzahl ist   Zahl, die die Mindestanzahl von Übereinstimmungen angibt, und max ist eine Ganzzahl   gleich oder größer als min , was die maximale Anzahl an Übereinstimmungen angibt.   Wenn das Komma vorhanden ist, aber max weggelassen wird, ist die maximale Anzahl von   Übereinstimmungen sind unendlich. Also {0,1} ist das gleiche wie ? , {0,} ist das gleiche wie * ,   und {1,} ist dasselbe wie + . Wenn Sie sowohl das Komma als auch das Maximum auslassen, wird das angezeigt   Engine, um das Token genau min mal zu wiederholen.

    
Wiktor Stribiżew 11.06.2015 09:25
quelle
3

Versuchen Sie, die untere Grenze wie (\d{0,8}) anzugeben.

Neben einigen Regex-Dialekten lassen sich Leerzeichen nach Komma in {0,8} construction nicht zulassen.

    
Alexey Lotysh 11.06.2015 09:24
quelle
1

Sie müssen auch eine untere Grenze festlegen.

%Vor%

Sie können hier eine Demo sehen

    
user142650 11.06.2015 09:25
quelle
1

Geben Sie auch die untere Grenze an

(?:$|сум)(0)?(\d{1,8})|(\d{1,8})(0)?(?:$|сум)

Das würde funktionieren.

    
Vaulstein 11.06.2015 09:26
quelle

Tags und Links