Men jag behärskar tyvärr inte "språket". har texten
9;#Namn efternamn;#1;#domän\användarnamn;#10;#Namnare efternamnare
Som jag vill få ut till
- Namn efternamn
- domän\användarnamn
- Namnare efternamnare
Hur ska jag skriva uttrycket för att få till det?
Är det alltid samma nummer på 9, 1 och 10?
9;#([^;]+);#1;#([^;]+);#10;#([\w\W]+)
Nej tyvärr, har med hjälp av lite olika sidor, listat ut lite grann av hur det funkar. Med följande så får jag ut de namnen som listas som användarnamn
DOMÄN\\[A-Öa-ö0-9]*[^;]
Men när jag lägger på [^#] innan "Domän" så får den inte längre några träffar :/
(DOMÄN\\[A-Öa-ö0-9]*)|([A-Öa-ö ]*)
Funkar inte heller, inget matchas
[^#] säger bara att du skall hämta ut ett tecken som inte är "#" så det är rätt klart att den inte hittar på:
[^#]DOMÄN\\[A-Öa-ö0-9]*[^;]
Hur ska då min regexp se ut? För att få ut både de som anges med domännamn och vanligt namn?
Hur är strängen? Är det någon konstant som man kan ha som referens? Jag utgick ifrån att 9, 1 och 10 är alltid samma.
#domän\\([^;]+)
Om det alltid är #domän innan den träff du vill få ut ($1 för grupp namn).
De enda konstanterna är # i början av strängen och ; i slutet. Är bara det imellan jag vill ha ut.
Problemet med den är ju att den plockar siffrorna också (#10;), Ska bara tillägga att jag inte vill ha med tecknen # och ;, utan bara namnen. Jag har lyckats skriva en som enligt detta fina lilla verktyg ska funka: http://gskinner.com/RegExr/
Då plockar den ut allt jag vill ha, men när jag kör i ASP.NET, så skippar den siffrorna i DOMÄN\AG5079 så det blir bara DOMÄN\AG
Regexpen ser ut såhär
(DOMÄN\\[A-Öa-ö0-9]*[^;])|([^#0-9;]+)
Nu få du ta ett steg tillbaka, du vill alltså hitta där #DOMÄN\(whatever); och inte #(whatever);?
#DOMÄN\\([^;]+);
ge resultatet på följnade test:
9;#Namn efternamn;#1;#DOMÄN\användarnamn;#10;#Namnare efternamnare
#DOMÄN\AG5079;
Träff på användarnamn och AG5079
(DOMÄN\\[A-Öa-ö0-9]*[^;])|([^#0-9;]+)
Om du bryter ut den så säger du matchar antigen domän\(och så få tecken som möjligt som är a-ö + 0-9) eller något som inte är # och 0-9.
Vill du alltid ha DOMÄN\ med i dina träffar?
#(DOMÄN\\[^;]+);
eller är det:
#([\D][\w\s\\]*);
du är ute efter? För att få:
9;#Namn efternamn;#1;#domän\användarnamn;#10;#Namnare efternamnare;#domän\AG5079;
Då måste den börja med # + INTE är ett tal på första tecknet.
Vill ha ut följande
9;#[B]Namn efternamn[/B];#1;#[B]domän\användarnamn[/B];#10;#[B]Namnare efternamnare[/B]
Namnen och användarnamnen varierar förstås
Och hur vill du komma åt varje träff då? Vad fungera inte?
GunnarDMedlem sedan juni 20014 290 inlägg Lätt modifierad variant av voigtann1's första uttryck:
#([^;]+);#1;#([^;]+);#\d+?#([\w\W]+)
POC:
#!/usr/bin/perl
$a="9;#Namn efternamn;#1;#doman\\anvandarnamn;#10;#Namnare efternamnare";
$a =~ /\d+?;#([^;]+);#1;#([^;]+);#\d+?;#([\w\W]+)/;
print $a;
print "\n";
print $1." - ". $2." - ".$3;
print "\n";
Vilket genererar:
9;#Namn efternamn;#1;#doman\anvandarnamn;#10;#Namnare efternamnare
Namn efternamn - doman\anvandarnamn - Namnare efternamnare