![]() |
"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). |
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: ![]() 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 |
Re: "RegEx Perl-Compatible" - Bedeutung dessen?
Zitat:
![]() 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. |
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.
|
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. ![]() Zitat:
Da denkt man, es gäbe einen Standard, aber jeder schreibt was anderes. |
Re: "RegEx Perl-Compatible" - Bedeutung dessen?
Schau mal hier:
![]() |
Re: "RegEx Perl-Compatible" - Bedeutung dessen?
Wikipedia kennt auch kein Lookaround :(
|
Re: "RegEx Perl-Compatible" - Bedeutung dessen?
Zitat:
|
Re: "RegEx Perl-Compatible" - Bedeutung dessen?
Okidoki, ich nehme das jetzt einfach mal so hin :o)
Danke Euch allen! |
Re: "RegEx Perl-Compatible" - Bedeutung dessen?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz