webForumDet fria alternativet

Enkelt regexp

13 svar · 803 visningar · startad av Gildebrand

GildebrandMedlem sedan juni 2009920 inlägg
#1

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?

voigtann1Medlem sedan juni 20019 519 inlägg
#2

Är det alltid samma nummer på 9, 1 och 10?

9;#([^;]+);#1;#([^;]+);#10;#([\w\W]+)
GildebrandMedlem sedan juni 2009920 inlägg
#3

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

voigtann1Medlem sedan juni 20019 519 inlägg
#4

[^#] 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]*[^;]
GildebrandMedlem sedan juni 2009920 inlägg
#5

Hur ska då min regexp se ut? För att få ut både de som anges med domännamn och vanligt namn?

voigtann1Medlem sedan juni 20019 519 inlägg
#6

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).

GildebrandMedlem sedan juni 2009920 inlägg
#7

De enda konstanterna är # i början av strängen och ; i slutet. Är bara det imellan jag vill ha ut.

voigtann1Medlem sedan juni 20019 519 inlägg
#8

#([^;]+);

GildebrandMedlem sedan juni 2009920 inlägg
#9

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;]+)
voigtann1Medlem sedan juni 20019 519 inlägg
#10

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.

GildebrandMedlem sedan juni 2009920 inlägg
#11

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

voigtann1Medlem sedan juni 20019 519 inlägg
#12

Och hur vill du komma åt varje träff då? Vad fungera inte?

GunnarDMedlem sedan juni 20014 290 inlägg
#13

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
SjodahlMedlem sedan maj 20033 218 inlägg
#14

Regexp: Enligt 10W32

... RADERAT!

135 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)