regulärer Ausdruck für Funktionsaufrufe !?

Steve222

Mitglied
Hallo allerseits!

Ich möchte bestimmte Zeichenketten finden, und zwar
Funktionsaufrufe selbst definierter Funktionen.
Dafür sollen Standardfunktionen von VBScript wie z.B. trim() oder CInt()
ausgefiltert, das heißt weggelassen werden.

Grundsätzlich suche ich nach einer Zeichenkette, die einen Unterstrich
"_" enthalten darf und die mit einer öffnenden runden Klammer endet.

Ich habe einen regulären Ausdruck der funktioniert beinahe, aber eben nicht
korrekt. Warum übersieht dieser Funktionsaufrufe die er eigentlich finden sollte?

[^(trim|form|cstr|Write|parseFloat|recordset1|getElementById|switch|chr|session|CreateObject|request|split|escaping|cdate|ubound|left|isnull|isnumeric|\ \=\.\+\>\<\,)][a-zA-Z0-9\_]+[\(]

wenn das Gleichjheitszeichen weg ist dann übersieht dieser die Funktionsaufrufe die er eigentlich finden soll NICHT mehr, aber die Ausfilterung der Standardfunktionen klappt auch nicht mehr.

[^(trim|form|cstr|Write|parseFloat|recordset1|getElementById|switch|chr|session|CreateObject|request|split|escaping|cdate|ubound|left|isnull|isnumeric|\ \.\+\>\<\,)][a-zA-Z0-9\_]+[\(]


___________________________________

logischer wäre eigentlich die NICHT Klausel [^(...|...|...|...)] innerhalb [a-zA-Z0-9\_]

einzusetzen, oder ?

Das ging aber irgendwie nicht.

Wer kann mir helfen?

Gruß

Steve222
 
Hi.

Du kannst innerhalb der eckigen Klammern keine Gruppierungsausdrücke verwenden.

Mit den eckigen Klammern beschreibt man eine "Zeichen-Klasse". Egal was du da in die eckigen Klammern reinschreibst - diese Zeichen-Klasse umfasst immer nur ein Zeichen.

Code:
[^(abc|abd|abx|abz)] == [^abdxz)|(]

Versuch's mal so:
Code:
\b(?!trim|clng|cbool|split|join|isempty|...)(\w(?:\w|\d)+)\s*\(
Gruß
 
Hallo,

und vielen Dank, hat mir schon gut geholfen.

Du scheinst fortgeschrittene Kenntnisse zu haben.
(Jetzt muss ich nur noch den Ausdruck verstehen.)

Du schreibst ,dass die eckige Klammer Zeichenklasse meint und ein einzelnes Zeichen
meint. Damit ist eine Stelle (Position) gemeint, oder?

Mit [abc] ist ein einzelnes a oder ein einzelnes b oder ein einzelnes c gemeint?!

Mit [abc]+ sind beliebige kombinationen einer oder mehrerer Instanzen jedes Zeichens
gemeint.
Irgendwie wird durch das "+" die Sache mit dem einzelnen Zeichen
aufgeweicht.

Ich denke, dass das überflüssig war von einer Instanz eines Zeiches zu "reden" denn
wann immer ein Zeichen notiert wird ist es eine Instanz.Das Zeichen "an sich" kann
nicht notiert werden, nur gemeint sein.

Aber könnte man nicht dann auf die Idee kommen, dass mit
[abc]+

nur jeweils eins der drei Zeichen ein- oder mehrfach gemeint ist ?

also entweder
>>a oder beliebig viele a's<<
oder
>>b oder beliebig viele b's<<
oder
>>c oder beliebig viele c's<<


Nun gut, taste mich da gerade ran.

Viele Grüße
aus dem Rheinland

Steve222
 
Zuletzt bearbeitet:
Hallo,

und vielen Dank, hat mir schon gut geholfen.

Du scheinst fortgeschrittene Kenntnisse zu haben.
(Jetzt muss ich nur noch den Ausdruck verstehen.)

Du schreibst ,dass die eckige Klammer Zeichenklasse meint und ein einzelnes Zeichen
meint. Damit ist eine Stelle (Position) gemeint, oder?

Mit [abc] ist ein einzelnes a oder ein einzelnes b oder ein einzelnes c gemeint?!

Mit [abc]+ sind beliebige kombinationen einer oder mehrerer Instanzen jedes Zeichens
gemeint.
Irgendwie wird durch das "+" die Sache mit dem einzelnen Zeichen
aufgeweicht.
Nein, denn die Zeichenklasse selbst steht weiterhin für ein einzelnes Zeichen. Das Metazeichen "+" führt allerdings dazu, das das vorherige Element des reg. Ausdrucks mind. 1 mal oder mehrfach auftreten muß.

Ich denke, dass das überflüssig war von einer Instanz eines Zeiches zu "reden" denn
wann immer ein Zeichen notiert wird ist es eine Instanz.Das Zeichen "an sich" kann
nicht notiert werden, nur gemeint sein.

Aber könnte man nicht dann auf die Idee kommen, dass mit
[abc]+

nur jeweils eins der drei Zeichen ein- oder mehrfach gemeint ist ?

also entweder
>>a oder beliebig viele a's<<
oder
>>b oder beliebig viele b's<<
oder
>>c oder beliebig viele c's<<
Nein, denn wie gesagt bedeutet das Metazeichen "+" die mehrfache Anwendung des vorigen Elementes. Es wird sich nicht gemerkt welches Zeichen zuletzt erfasst wurde.

Beliebig viele (aber mind. ein) a hintereinander, b hintereinander oder c hintereinander kann man mit einer Alternation erreichen:
Code:
a+|b+|c+
Gruß
 
Zurück