Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   "RegEx Perl-Compatible" - Bedeutung dessen? (https://www.delphipraxis.net/100127-regex-perl-compatible-bedeutung-dessen.html)

s-off 22. Sep 2007 19:42


"RegEx Perl-Compatible" - Bedeutung dessen?
 
Hallo zusammen,

ich beschäftige mich gerade mit regulären Ausdrücken - ein sehr interessantes Thema.

Nun bin ich allerdings auf etwas gestossen, was ich etwas seltsam finde.

Ich habe versucht, einen Ausdruck zu erstellen, der mir in meinem Quellcode sämtliche Strings rausfiltert. Dabei ist folgendes herausgekommen, was auch funktioniert:
Delphi-Quellcode:
(?<=.*\').*(?=\'.*)
Ich weiss, dass dieser Ausdruck nicht 100% wasserdicht ist - das ist jetzt aber auch nicht das Thema.

Worum es mir geht, ist folgendes:
Ich habe eine Pas-Datei mit UltraEdit geöffnet, und wollte mit der UltraEdit-Suche meinen Ausdruck testen; das Ergebnis => es wurde kein String gefunden, obwohl definitv welche vorhanden sind.
Das gleiche Phänomen mit dem Suchprogramm FileLocator - dieses meckerte mich sogar noch an, dass mein regulärer Ausdruck fehlerhaft sei.
In RegEx-Testern wie bspw. 'Expresso' funktioniert der Ausdruck hingegen tadellos.

Meine Vermutung geht dahin, dass es an den benutzten Lookarounds liegt, und dass sowohl UltraEdit als auch FileLocater diese nicht unterstützen. Lt. Programmhilfe unterstützen beide Programme aber Perl-kompatible Reguläre Ausdrücke.

Und da frage ich mich - für was steht denn 'Perl-kompatibel'. Ich hätte jetzt gedacht - gut, Perl-kompatible RegEx, also werden wohl auch Lookarounds unterstützt - Fehlanzeige :(

Edit:
So, ich habe nun mal in den Klammern die '*' weggelassen, so dass das Konstrukt wie folgt aussieht:
Delphi-Quellcode:
(?<=.').*(?='.)
Und nun funktioniert der Ausdruck.
Was mich nun aber wundert - warum meckert Expresso nicht?

Edit2: zu früh gefreut - der angepasste Ausdruck funktioniert nur bei FileLocater - nicht aber bei UltraEdit - obwohl beide die gleiche Engine benutzen (Boost.Regex).

SirTwist 22. Sep 2007 20:42

Re: "RegEx Perl-Compatible" - Bedeutung dessen?
 
Perl-kompatible Regular Expressions sind das, was die Manual Page von Perl zum Thema Regular Expressions beschreibt.

Die Manpage heißt "perlre" und sollte bei jeder Unix/Linux-basierten Perl-Installation dabei sein.

Für die Nicht-Unixler hilft Google weiter: Manpage "perlre".

Um ehrlich zu sein, ich hab Deinen RE auch nicht verstanden. Was ist das für eine Syntax, wo hast Du die her?

Gruß,
SirTwist

s-off 22. Sep 2007 20:47

Re: "RegEx Perl-Compatible" - Bedeutung dessen?
 
Zitat:

Zitat von SirTwist
Um ehrlich zu sein, ich hab Deinen RE auch nicht verstanden. Was ist das für eine Syntax, wo hast Du die her?

Öhm, aus diversen Tutorials zum Thema, bspw. hier
Die Lookarounds sind dort exakt so beschrieben, wie ich sie angewendet habe.

Delphi-Quellcode:
(?<=.*\').*(?=\'.*)
(?<=.*\') - Lookbehind => findet irgendwelche Zeichen (.) egal wie oft (*) gefolgt von einem ' (\') - das Ganze wird aber nicht in das Ergebnis mit einbezogen

.* - der String an sich

(?=\'.*) - Lookahead => findet ein ' (\') gefolgt von irgendwelchen Zeichen (.) egal wie oft (*) - aber nicht in Ergebnis mit einbeziehen.

Progman 22. Sep 2007 21:03

Re: "RegEx Perl-Compatible" - Bedeutung dessen?
 
Beschreibung von Perl-compatiblen Regular Expressions findet man auch in guten php-Manuals, die dürften nämlich identisch sein. Ich bezweifle nur, ob die in Delphi genauso gültig sind? Hab damit noch keine Erfahrung.

s-off 22. Sep 2007 21:08

Re: "RegEx Perl-Compatible" - Bedeutung dessen?
 
Es geht jetzt ja nicht um Delphi, sondern um reguläre Ausdrücke im Allgemeinen.

Desweiteren steht überall, dass Perl-RegEx Lookarounds unterstützen, bspw. hier
Zitat:

Perl 5 introduced two very powerful constructs: "lookahead" and "lookbehind".
Auf der perlre-Mainpage allerdings, findet sich dazu nichts - sehr verwirrend alles...
Da denkt man, es gäbe einen Standard, aber jeder schreibt was anderes.

Progman 22. Sep 2007 21:16

Re: "RegEx Perl-Compatible" - Bedeutung dessen?
 
Schau mal hier: Klick

s-off 22. Sep 2007 21:22

Re: "RegEx Perl-Compatible" - Bedeutung dessen?
 
Wikipedia kennt auch kein Lookaround :(

Meflin 22. Sep 2007 21:26

Re: "RegEx Perl-Compatible" - Bedeutung dessen?
 
Zitat:

Zitat von s-off
Wikipedia kennt auch kein Lookaround :(

Die Sache ist die: auch bei PerlRe gibts verschiedene Versionen - neuere Versionen können mehr, ältere weniger. Und dann kommt es eben ganz darauf an, ob deine Delphi-Komponente (bzw das Programm) auf der neuesten Version basiert ;)


s-off 22. Sep 2007 21:55

Re: "RegEx Perl-Compatible" - Bedeutung dessen?
 
Okidoki, ich nehme das jetzt einfach mal so hin :o)

Danke Euch allen!

SirTwist 22. Sep 2007 22:45

Re: "RegEx Perl-Compatible" - Bedeutung dessen?
 
Zitat:

Zitat von s-off
Auf der perlre-Mainpage allerdings, findet sich dazu nichts

Doch, Look-Ahead und Look-Behind werden in der Manpage erwähnt, aber das Kapitel beginnt mit:
Zitat:

The stability of these extensions varies widely. Some have been part of the core language for many years. Others are experimental and may change without warning or be completely removed. Check the documentation on an individual feature to verify its current status.
Ich gebe zu, ich hatte bislang nichts davon gewusst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz