| 

.NET C# Java Javascript Exception

3
Hallo zusammen,

für folgendes Problem bekomme ich das Pattern einfach nicht hin: Es sollen alle Zeichenketten gefunden werden, die mit
con( beginnen und mit einem Semikolon enden. Das Semikolon darf aber nicht in Anführungszeichen stehen.
Bsp:

davorcon('test');danach => con('test');
davorcon('test;');danach => con('test;');
davorcon('test;'-test);danach => con('test;'-test);

vg
18.07.2011
Gast
31 2
1
Steht vor dem End-Semikolon auch immer eine schließende Klammer? Und kommt nach der öffnenden Klammer immer ein Anführungszeichen? Können in der Zeichenkette auch mehrere Anführungszeichenpaare stehen? Ist ein Text wie
davorcon('test;);danach
denkbar (und sei es als Eingabefehler), und wie soll damit umgegangen werden?
Matthias Hlawatsch 18.07.2011
2 Antworten
3
Hi,

da eine weitere Definition fehlt, geh ich davon aus, dass auch
con();
con(1);
gefunden werden sollte.. Was ich nicht verstanden hab, ist das mit dem "mit con beginnen" und die dazugehörigen Beispiele. Auch fehlt die Angabe, um welche Platform es sich handelt (Javascript?).
Mit
\bcon\(('([^'\\]|\\[\w\W])*'|[^')])*\);
kommst Du aber sicherlich ein Stück weiter.

'([^'\\]|\\[\w\W])*'
findet eine Zeichenkette, die in der Form auch Escape-Zeichen erlaubt, also z.B. auch '\''.
[^')]
findet ein beliebiges Zeichen, außer ' und ) (je nach Sprache musst Du evtl. auch ein \ vor ' und/oder ) setzen).
\b
prüft, ob die aktuelle Position eine Wortgrenze darstellt (also Anfang/Ende des Textes oder Anfang/Ende eines Wortes)

Offen ist, ob noch weitere Klammernpaare vorkommen können, also z.B.
con(('2'));
Das würde momentan nicht funktionieren...

Edits: \b hinzugefügt, typo
18.07.2011
WolfgangKluge 1,0k 2 7
Danke dir, für die korrekte Antwort ;) Denke aber er sucht nur die Ergebnisse, wo con am Anfang steht, also ohne davorcon etc. Aber eine genaue Spezifikation wäre hier hilfreich!
Dustin Klein 19.07.2011
Hi Dustin,
wie geschrieben, wurde(und werde) ich nicht ganz schlau aus der Beschreibung.

"Beginnen" ist nicht immer gleichzusetzen mit "Wortanfang", aber Du hast bestimmt recht... ;)
WolfgangKluge 19.07.2011
War auch nur geraten, aber erschien mir sinnvoll, wobei du natürlich Recht hast, dass es nicht der Wortanfang ist ;-)
Dustin Klein 19.07.2011
2
Ist leider nicht getestet, da ich gerade keine Zeit zum ausführlichen Testen habe. Mir liegen RegEx leider nicht so super, aber hoffe mal das könnte klappen:

\bcon\('[^)]*.'*;

Hier musst du auf jeden Fall noch modifizieren, ist definitiv eine schlechte Syntax! Ich werde es gerne heute Abend testen und verbessern, sofern bis dato noch keiner eine Antwort hat. Hoffe es hilft die weiter!
18.07.2011
Dustin Klein 2,9k 2 9

Stelle deine Regex-Frage jetzt!