Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: TMC am 16.12.05 - 22:45:34

Titel: Regular Expressions auf Richtext-Items
Beitrag von: TMC am 16.12.05 - 22:45:34
Regular Expressions sind ja eigentlich eine tolle Sache, auch wenn die Expressions für Außenstehende eher wie Voodoo aussehen  ;D

Aktuell habe ich 2 Datenbanken hier, wo ich mit RE gerne die Richtext-Items bearbeiten würde.
Hier und da Änderungen, kommt immer wieder vor.

Am besten:
Die Expressions in ein (Profil-)dokument speichern, und dann z.B. per Agent entsprechende Dokumente bearbeiten.

Hat das von Euch schon mal wer gemacht? LotusScript kennt ja RE nicht, außerdem ist das nicht wirklich per LS umsetzbar, außer man investiert sehr viel Zeit.

Ich will da einfach ein paar REs durchlaufen lassen, z.B. was "kleines" wie hier:
Code
^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(/[^/][a-zA-Z0-9\.\,\?\'\\/\+&%\$#\=~_\-@]*)*$

Nachdem zur Laufzeit eher nicht geht, möchte ich das über Agenten machen.

Danke für Tipps.

Matthias
Titel: Re: Regular Expressions auf Richtext-Items
Beitrag von: TMC am 16.12.05 - 23:03:43
Habe nochmal im Forum gesucht, u.a. hier eine Aussage von Bernhard:

Regular expressions lassen sich mit einmaligem Aufwand ja einfach auch mit LS nachbauen. Inclusive aller eigener Freiheiten  ;D

Also RE doch einfach in LotusScript nachbaubar? Bin aufgeschlossen und für Tipps dankbar.
Aber mir fehlt da komplett der Ansatz, wie ich das anstellen sollte.
Titel: Re: Regular Expressions auf Richtext-Items
Beitrag von: koehlerbv am 16.12.05 - 23:12:24
Matthias, dies läuft ja vorrangig auf einen Parserbau hinaus. Einen Ansatz zu RE gibt es ja mit @Matches sogar in Notes (für das ein oder andere Problem kann das sogar via Evaluate die ein oder andere Eigenprogrammierung ersparen).

Da mit LS Nachbau angesagt ist, ist m.E. immer vorab zu prüfen, ob und wenn ja wie man die Mächtigkeit einer RegEx in Bezug auf die konkrete Aufgabe vereinfachen kann.

RegEx und RTI-Änderungen werden in Notes aber ein haariges Ding. Ich denke, die Themen (RTIs manipulieren einerseits und RegExs und Stringmanipulationen) sollte man daher streng gekapselt sehen.

Bernhard
Titel: Re: Regular Expressions auf Richtext-Items
Beitrag von: TMC am 16.12.05 - 23:26:24
Bernhard, RTI ist kein Problem, da -- wie oben angedeutet -- das via Agent läuft, also beispielsweise Nachts über DXL laufen kann, damit also keinerlei Performance-Einschränkungen.

Mir geht es hier primär um RE, die Umsetzung auf RTI ist nicht wirklich problematisch.

@Matches ist sicherlich ein kleiner Bruchteil. Aber komplexe RE sind doch ein Tabu-Thema für @Formula/LS.

Die Flexibilität via RE ist halt enorm: z.B. plattformunabhängiger "Code". Ich kann das im RE-fähigen Texteditor / Windows-Dateisuchmaschine genauso einsetzen wie in einer .NET- oder Perl-Umgebung.
Der Entwickler muss sich also nur einmal Gedanken machen, und kann diese prinzipiell beliebig einsetzen.
Und es gibt viele Aufgaben, die sich stetig wiederholen, z.B. http://www.regexlib.com/ listet solche.

Ich überlege auch schon, das ganze von einer externen App machen zu lassen und dann wieder in N/D zurückzuschreiben.
Titel: Re: Regular Expressions auf Richtext-Items
Beitrag von: koehlerbv am 16.12.05 - 23:30:44
Ich überlege auch schon, das ganze von einer externen App machen zu lassen und dann wieder in N/D zurückzuschreiben.

Hallo Matthias,

das wäre sicher bei weitem nicht die schlechteste Idee (vor allem, wenn Du eh schon über DXL arbeitest), da in einer entsprechenden externen App RE sehr maschinennah programmiert sein werden, was unvergleichlich performanter ist als ein Nachbau (!) auf Basis eines Interpreters.

Bernhard
Titel: Re: Regular Expressions auf Richtext-Items
Beitrag von: flaite am 17.12.05 - 04:33:31
Java 1.4 (Domino 7). Für Java 1.3 gibt es dafür irgendwo auf apache.jakarta auch packages.
Und. Bernhard: Regular Expressions können bestimmte Aufgaben wesentlich einfacher erledigen als reines Lotus Script String-Handling (würd ich sagen). 
google rät: http://forum.java.sun.com/thread.jspa?threadID=432987&messageID=1939602

Dürfte als 3 stufiger Prozess (in einem Java Agenten) gehen.
1. Dokument in DXL umwandeln (oder einfach nur das RT Feld).
2. Regular Expressions drüberlaufen lassen (mit den genannten Apis, s. link oben (wenig code)). 
3. Änderungen in Notes Dokument zurückspeichern.

Problem könnte sein, dass Round Trip Engineering Notes-Doc-> DXL -> NotesDoc in bestimmten Fällen nicht 100% dokumentecht ist. IBM arbeitet dran.
Trotzdem ein interessanter Ansatz.

Axel
Titel: Re: Regular Expressions auf Richtext-Items
Beitrag von: m3 am 17.12.05 - 10:05:28
Die Flexibilität via RE ist halt enorm: z.B. plattformunabhängiger "Code". Ich kann das im RE-fähigen Texteditor / Windows-Dateisuchmaschine genauso einsetzen wie in einer .NET- oder Perl-Umgebung.
Also da muss ich als gebranntes Kind leider wiedersprechen. Es gibt (leider) sehr wohl Unterschiede zwischen den verschiedenen RegEx-Implementationen. Vor allem, wenn man über die 0815-Ausdrücke hinaus geht.
Titel: Re: Regular Expressions auf Richtext-Items
Beitrag von: flaite am 17.12.05 - 10:44:26
Ich bin sowieso grundsätzlich daran interessiert, eine Beispieldatenbank "Praktisch Arbeiten mit DXL" zu erstellen, wo man solche Use Cases lösen könnte.
Titel: Re: Regular Expressions auf Richtext-Items
Beitrag von: koehlerbv am 17.12.05 - 13:00:58
Und. Bernhard: Regular Expressions können bestimmte Aufgaben wesentlich einfacher erledigen als reines Lotus Script String-Handling (würd ich sagen).

Da stimme ich Dir ohne Wenn und Aber zu, Axel.

Bernhard