Java >> Java tutorial >  >> Java

Tillad kun venstrejusterede nuller ved hjælp af regex

Jeg er ret ny til at bruge regex. Jeg har et serienummer, som kan have følgende former:VV-XXXXXX-P eller VVXXXXXXP
Hvis bindestreg-varianten bruges, så kan antallet af 'X' være variabelt. For eksempel svarer 01-162-8 til 010001628.

For at identificere de 2 formater har jeg oprettet følgende regex:

String HYPHENS = ([0]{1}[13]{1}-[1-9]{1,6}-[0-9]{1})
String NO_HYPHENS = ([0]{1}[13]{1}[0-9]{6}[0-9]{1})

Men problemet med NO_HYPHENS-varianten er, at den tillader 0 hvor som helst i sekvensen. For eksempel:010010628 bør ikke være en gyldig sekvens, fordi der er en ikke-indledende 0.

Derudover, hvordan ville jeg oprette et regex, som jeg kan bruge til at erstatte alle 0 fra sekvensen, men den første? Jeg har prøvet følgende, men det erstatter også de første 0.

String code = 010001234;
code = code.replaceAll("0+", "");

Hvordan kunne jeg ændre regex'erne for at opnå dette?

Svar

Du kan bruge

String NO_HYPHENS = "0[13](?!0*[1-9]0)[0-9]{6}[0-9]";
code = code.replaceAll("(?!^)0(?!$)", "");

Se regex-demoen. 0[13](?!0*[1-9]0)[0-9]{6}[0-9] regex matcher:

  • 0 – nul
  • [13] – en eller tre
  • (?!0*[1-9]0) – alle nuller efterfulgt af et ciffer, der ikke er nul og derefter et nul, er ikke tilladt på denne placering
  • [0-9]{6} – seks cifre
  • [0-9] – et ciffer.

Jeg forstår, at du bruger det i Java med .matches , ellers, tilføj ^ i starten og $ til sidst.

Også (?!^)0(?!$) regex vil matche ethvert nul, der ikke er ved strengens start-/slutposition.


Java tag