Regular Expressions
Matchande enkla mönster
Sök…
Matcha ett ensiffrigt tecken med [0-9] eller \ d (Java)
[0-9]
och \d
är likvärdiga mönster (såvida inte din Regex-motor är unicode-medveten och \d
matchar också saker som ②). De kommer båda att matcha ett ensiffrigt tecken så att du kan använda vilken notation du finner mer läsbar.
Skapa en sträng av mönstret du vill matcha. Om du använder notationen \ d, måste du lägga till ett andra motstånd för att undgå det första motståndet.
String pattern = "\\d";
Skapa ett mönsterobjekt. För in mönstringssträngen i metoden compile ().
Pattern p = Pattern.compile(pattern);
Skapa ett Matcher-objekt. Passera strängen du letar efter för att hitta mönstret till matcharen () -metoden. Kontrollera om mönstret hittas.
Matcher m1 = p.matcher("0");
m1.matches(); //will return true
Matcher m2 = p.matcher("5");
m2.matches(); //will return true
Matcher m3 = p.matcher("12345");
m3.matches(); //will return false since your pattern is only for a single integer
Matchar olika nummer
[ab]
där a och b är siffror i intervallet 0
till 9
[3-7] will match a single digit in the range 3 to 7.
Matchar flera siffror
\d\d will match 2 consecutive digits
\d+ will match 1 or more consecutive digits
\d* will match 0 or more consecutive digits
\d{3} will match 3 consecutive digits
\d{3,6} will match 3 to 6 consecutive digits
\d{3,} will match 3 or more consecutive digits
\d
i ovanstående exempel kan ersättas med ett nummerintervall:
[3-7][3-7] will match 2 consecutive digits that are in the range 3 to 7
[3-7]+ will match 1 or more consecutive digits that are in the range 3 to 7
[3-7]* will match 0 or more consecutive digits that are in the range 3 to 7
[3-7]{3} will match 3 consecutive digits that are in the range 3 to 7
[3-7]{3,6} will match 3 to 6 consecutive digits that are in the range 3 to 7
[3-7]{3,} will match 3 or more consecutive digits that are in the range 3 to 7
Du kan också välja specifika siffror:
[13579] will only match "odd" digits
[02468] will only match "even" digits
1|3|5|7|9 another way of matching "odd" digits - the | symbol means OR
Matcha siffror i intervall som innehåller mer än en siffra:
\d|10 matches 0 to 10 single digit OR 10. The | symbol means OR
[1-9]|10 matches 1 to 10 digit in range 1 to 9 OR 10
[1-9]|1[0-5] matches 1 to 15 digit in range 1 to 9 OR 1 followed by digit 1 to 5
\d{1,2}|100 matches 0 to 100 one to two digits OR 100
Matchande siffror som delar med andra nummer:
\d*0 matches any number that divides by 10 - any number ending in 0
\d*00 matches any number that divides by 100 - any number ending in 00
\d*[05] matches any number that divides by 5 - any number ending in 0 or 5
\d*[02468] matches any number that divides by 2 - any number ending in 0,2,4,6 or 8
matchande siffror som delar med 4 - valfritt antal som är 0, 4 eller 8 eller slutar i 00, 04, 08, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60 64, 68, 72, 76, 80, 84, 88, 92 eller 96
[048]|\d*(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)
Detta kan förkortas. I stället för att använda 20|24|28
vi till exempel använda 2[048]
. Eftersom 40-, 60- och 80-talet har samma mönster kan vi också inkludera dem: [02468][048]
och de andra har också ett mönster [13579][26]
. Så hela sekvensen kan reduceras till:
[048]|\d*([02468][048]|[13579][26]) - numbers divisible by 4
Att matcha siffror som inte har ett mönster som de som kan delas med 2,4,5,10 etc kan inte alltid göras kortfattat och du måste oftast ta till dig ett antal siffror. Att till exempel matcha alla siffror som delar med 7 inom intervallet 1 till 50 kan göras enkelt genom att lista alla dessa nummer:
7|14|21|28|35|42|49
or you could do it this way
7|14|2[18]|35|4[29]
Matchande ledande / släpande mellanrum
Efterföljande utrymmen
\s*$
: Detta kommer att matcha alla ( *
) mellanslag ( \s
) i slutet ( $
) i texten
Ledande utrymmen
^\s*
: Detta kommer att matcha alla ( *
) blanksteg ( \s
) i början ( ^
) av texten
Anmärkningar
\s
är ett vanligt metatecken för flera RegExp-motorer, och är avsett att fånga tecken på mellanrum (mellanslag, nylinjer och flikar till exempel). Obs : det förmodligen inte fångar in alla unicode-rymdkaraktärer . Kontrollera din motordokumentation för att vara säker på detta.
Matcha alla flottörer
[\+\-]?\d+(\.\d*)?
Detta kommer att matcha alla signerade float, om du inte vill ha tecken eller analysera en ekvation ta bort [\+\-]?
så du har \d+(\.\d+)?
Förklaring:
-
\d+
matchar valfritt heltal -
()?
betyder att parentesernas innehåll är valfritt men måste alltid visas tillsammans - '\.' matchar '.', vi måste undvika detta sedan '.' matchar normalt alla karaktärer
Så detta uttryck kommer att matcha
5
+5
-5
5.5
+5.5
-5.5
Att välja en viss rad från en lista baserad på ett ord på en viss plats
Jag har följande lista:
1. Alon Cohen
2. Elad Yaron
3. Yaron Amrani
4. Yogev Yaron
Jag vill välja förnamnet på killarna med efternamnet Yaron.
Eftersom jag inte bryr mig om vilket nummer det är kommer jag bara att sätta det som vilken siffra den är och en matchande prick och rymd efter det från början av raden, så här: ^[\d]+\.\s
.
Nu måste vi matcha utrymmet och förnamnet, eftersom vi inte kan se om det är stora eller små bokstäver som vi bara matchar båda: [a-zA-Z]+\s
eller [aZ]+\s
och kan också vara [\w]+\s
.
Nu specificerar vi det obligatoriska efternamnet för att bara få de rader som innehåller Yaron som efternamn (i slutet av raden): \sYaron$
.
Sammansätter allt detta ^[\d]+\.\s[\w]+\sYaron$
.
Liveexempel: https://regex101.com/r/nW4fH8/1