URL: https://www.overclockers.at/coding-stuff/c_guid_regex-match_aus_string_207689/page_1 - zur Vollversion wechseln!
will eine GUID in einem string finden. solang der string allein ne GUID ist klappts, aber nicht, wenn davor oder dahinter noch zeichen stehen.
Code:Regex RE = new Regex("^((?-i:0x)?[A-Fa-f0-9]{32}|[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}|{[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}})$"); MatchCollection ReMatches = RE.Matches(content); if (ReMatches.Count > 0) { foreach (Match m in ReMatches) { //do sumthin with it } }
Wenn das ein "oder" sein soll, dann fehlt dir ein |
edit:/ crap, ne das kanns nicht sein..
Ich hasse Regex, verwirren mich immer..
die regex hab ich auch nur aus einem anderen projekt gecopypasted, daher hab ich keine ahnung, wo ich ein | einfügen soll
aber solange der ganze string eine GUID ist, funktionierts ja auch, aber er soll auch ein match finden, wenn die GUID von anderen zeichen umgeben ist.
edit: geht mir genauso.
Wenn du das ^ und das $ in deinem RegEx wegbaust, dann sollte es funktionieren. Diese Zeichen stehen für den Anfang und das Ende eines Strings, wenn also davor bzw. danach noch was kommt, kann er nichts finden.
Hoffe, ich konnte dir weiterhelfen.
Bitte poste ein Beispiel fuer einen (oder besser zwei) tatsaechliche Nicht-Matches, die du gerne gematcht haettest.
Ich kenne mich in der Win32-Welt nicht so gut aus - kann es ueberhaupt vorkommen, dass so eine GUID ohne literale { und } an Anfang und Ende auftritt?
Wie siddhartha schon richtig gesagt, gehören nur die 2 Zeichen weg und es sollte funktionieren.
Entsprechender MSDN Link.
danke, hab ich mittlerweile auch durch probieren rausgefunden
Code:[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}
Mit dem Regexp
Code: PHP.*([0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}).*
Die .* am Anfang und Ende kann man sich schenken, wenn der Match eh zeilenweise passiert. Und statt [0-9a-fA-F] kann man laut POSIX auch [[:xdigit:]] schreiben, wenn einem das besser gefaellt. Das sollte speziell in diesem Fall mit den literalen Hyphens in der RE zur Lesbarkeit beitragen koennen.
C# und POSIX passen aber irgendwie garned zusammen oder?
Naja, die meisten RegEx-Libraries (egal welcher Programmiersprachen) lehnen sich entweder an POSIX RE, POSIX ERE, oder PerlCRE an. Alle drei Dialekte verstehen sich auf diese "POSIX Character Classes". Wenn es das also in irgendeiner Sprache/RE-lib nicht gibt, ist das imo als Bug zu reporten
Nur weil ein System als Ganzes nicht vollstaendig POSIX-konform ist, heiszt das nicht automatisch, dass es nicht trotzdem Teile von POSIX implementiert.
Zitat von COLOSSUSNaja, die meisten RegEx-Libraries (egal welcher Programmiersprachen) lehnen sich entweder an POSIX RE, POSIX ERE, oder PerlCRE an. Alle drei Dialekte verstehen sich auf diese "POSIX Character Classes". Wenn es das also in irgendeiner Sprache/RE-lib nicht gibt, ist das imo als Bug zu reporten
Du scheinst recht zu haben. Zumindest finde ich hier nichts Entsprechendes:
http://msdn.microsoft.com/en-us/library/20bw873z.aspx
Tjo, dumm gelaufen. Wenn man bedenkt dass sie jeden moeglichen Shit da reingeworfen haben (IsGreekandCoptic - wtf?), haetten die alnum, alpha, print, digit, xdigit und Co. auch nicht geschadet. Wenn Hanlon's Razor nicht waere, wuerde ich ihnen ja unterstellen, dass das aufgrund irgendeiner obskuren, boeswilligen Absicht gemacht wurde
Zitat von COLOSSUSWenn Hanlon's Razor nicht waere, wuerde ich ihnen ja unterstellen, dass das aufgrund irgendeiner obskuren, boeswilligen Absicht gemacht wurde
man kann auch nicht alles haben
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025