Laden...

Suche Regex zum Parsen von struct/typedef-Code

Erstellt von Seikilos vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.634 Views
S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 15 Jahren
Suche Regex zum Parsen von struct/typedef-Code

Versuche ein RegExpr, welches mir in solchem Code:

	struct W_RX_: RX_
	{
		W_RX_() : RX_() {};
		friend class RAW;
		std::string dbUniqueId;
		W_RX_Header header;

	};
	typedef struct W_RX_W_RX_;

Ziel ist das Filtern aller variablen deklarationen, dieser Pattern klappt:


@"(\s+)[^friend class]([\w:_]+)\s+([\w]+);"

Aber ich bekomme durch [^friend class] probleme mit W_RX_, es ist in der Tat so, dass alles korrekt gematched wird, jedoch in der jeweiligen Gruppe anstatt W_RX_ nur RX drin ist!

Gibt es da einen anderen weg? Oder wo ist der fehler?

Life is a short

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Seikilos,

[^friend class]

ist das gleiche wie

[^acdefilnrs ]

und damit sicher nicht, was du meinst. Könnte sein, dass du eigentlich einen negativen Lookbehind meinst.

herbivore

PS: Du kennst On-the-fly Regex-Tester: Regex-Lab?

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 15 Jahren

Klar kenne ich den RegExpr Tester, hab ich natürlich auch.

Meinst du mit dem Lookahead:


@"(\s+)(?!friend class)([\w:_]+)\s+([\w]+);"

Wenn ja: hat nicht geklappt.

PS: Kennst du schon das Online Reg Expr Test Tool? 😄

Lookbehind konsumiert doch nur das Element nicht, oder?

Life is a short

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Seikilos,

hat nicht geklappt.

was willst du denn überhaupt erreichen? Was soll der Teil mit dem friend class bewirken?

Kennst du schon das Online Reg Expr Test Tool?

Kannte ich nicht ... und es ist vor allem nicht on-the-fly. 😃

herbivore

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 15 Jahren

Das ist schlechter C++ code, viel davon und ich muss alle getter und setter generieren, nur nicht für friend class 😄
Im Grunde ist das ja wurscht, ist ja nur ne Zeichenketten-Operation

Life is a short

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Seikilos,

dann ist der negative Lookbehind schon das richtige. Du musst nur noch dafür sorgen, dass der Pattern - wenn überhaupt - immer auf eine gesamte Struktur-Komponente passt, also z.B.

(?≤[{;])(\s*)(?!friend class)([\w:_]+)\s+([\w]+);

herbivore

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 15 Jahren

Oha, wie unübersichtlich, aber es geht! Danke 😃

Life is a short

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Seikilos,

den negativen Lookahead kannst du jetzt sogar weglassen, weil eine friend-class-Zeile schon deshalb nicht passt, weil sie aus drei und nicht nur aus zwei Worten besteht.

herbivore

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 15 Jahren

Weißt du, ob man die Klammern Parre () nummerieren kann? Ich muss ein Pattern ändern und vorne ein Klammernpaar einfügen, nur verschiebt sich dadurch der index aller späteren klammern, was extrem nervig ist

Life is a short

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Seikilos,

man kann Gruppen benennen: (?<name>...)

herbivore

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 15 Jahren

Wollte gestern die Antwort selber posten, aber da hatte das Forum Probleme.

Life is a short