webForumDet fria alternativet

Pattern / Reguljära uttryck

7 svar · 700 visningar · startad av Broms

BromsMedlem sedan sep. 2002190 inlägg
#1

Jag har en pattern som ser ut såhär:

Pattern p = Pattern.compile("^[A-ZÅÄÖa-zåäö0-9 ]*$");

Jag skulle dock vilja att den även tar med + - och . (punkt)
Jag är inte så insatt i det där med hur escapetecket används i ett pattern, någon som har lust att rycka in?

Mvh E

spangoMedlem sedan juni 20006 147 inlägg
#2

Pattern p = Pattern.compile("^[A-ZÅÄÖa-zåäö0-9 \\-\\+\\.]*$");

Det är lite mögigt med regexpar i Java, eftersom specialtecken som plus/minus/punkt escapeas (försök stava det bättre själv ;) ) med backslash, men för att få in en backslash i en sträng måste man i sin tur escapea det med en backslash.

nitro2k01Medlem sedan aug. 20037 630 inlägg
#3

Till att börja med så måste du escapea tecknen +, - och . eftersom de används som nyckelord inom regexp. Och du har antgligen prövat:

Pattern p = Pattern.compile("^[A-ZÅÄÖa-zåäö0-9 [s]\+\-\.[/s]]*$");

Javas strängar är dock också escapeade. För att strängen ska få innehållet \ så måste du skriva \\. Så du måste skriva \\+\\-\\. så kommer strängen att få innehållet \+\-\. vilket är vad du vill i detta fall. Jag tycker övrigen att det verkar fel att använda kvantifikatorn * i detta fall, då den även matchar en tom sträng. Du kan också byta ut a-zA-Z0-9 mot \w (Eller snarare \\w som sagt) för att spara lite plats. Så:

Pattern p = Pattern.compile("^[\\wÅÄÖåäö\\.\\+\\- ]+$");
BromsMedlem sedan sep. 2002190 inlägg
#4

tack fungerade kanoners kanon :)

LimeMedlem sedan sep. 2001837 inlägg
#5

Hmm... blir det inte bara whitespaces kvar med det uttrycket??

BromsMedlem sedan sep. 2002190 inlägg
#6

Jag måste bara fråga en annan sak om just reguljära uttryck, återaccepterar svaret däruppe när detta har besvarats:

Om vi tar ett exempel: Pattern p = Pattern.compile("[0-9]{6}-[0-9]{4}+$");

1. Skillnad mellan {4}+$"); , {4}*$"); och {4}$");?
2. Varför inleds vissa uttryck med ^?
3. Vad betyder $?

Ang den första frågan så såg jag ingen skillnad på resultatet om jag tog bort plustecknet?

Mvh E

spangoMedlem sedan juni 20006 147 inlägg
#7

RTFM ;)

x{4} betyder "x fyra gånger"
x+ betyder "x en eller fler gånger"
x* betyder "x noll eller fler gånger"
^ betyder "början på strängen"
$ betyder "slutet på strängen"
[0-9]{6}-[0-9]{4}+$ betyder alltså "en sekvens på sex siffror, sen ett streck, sen en eller flera sekvenser om fyra siffror, följt av strängens slut".

Alltså kan [0-9]{4}+ motsvara "1234" eller "12345678", men inte "123" eller "123456".

BromsMedlem sedan sep. 2002190 inlägg
#8

tackar så hjärtligt, borde ha kollat upp saker och ting mer noggrant :D

Genererad på 379 ms · cache AV · v20260730165559-full.f96bc7eb