Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   regulärer Ausdruck: Anführungszeichen finden (https://www.delphipraxis.net/72697-regulaerer-ausdruck-anfuehrungszeichen-finden.html)

stz 5. Jul 2006 14:48


regulärer Ausdruck: Anführungszeichen finden
 
Moin,
ich bin auf der Suche nach einem regulären Ausdruck, der Anführungszeichen findet, aber mit \ escapte Anführungszeichen auslässt. Ich habe mir das so gebastelt:
Code:
[^\\]("|')|^("|')
habe aber nun das Problem, dass ich - wenn das Anführungszeichen nicht am Zeilenanfang steht - ich nicht nur das Anführungszeichen, sondern auch das Zeichen davor bekomme. Ich möchte aber wirklich nur das Anführungszeichen erhalten. Wer kann mir da helfen?

Gruß
Malte

PS: Das ganze brauche ich für einen TSynMultiSyn aus dem Synedit-Projekt.

Waldteufel 5. Jul 2006 14:57

Re: regulärer Ausdruck: Anführungszeichen finden
 
Hi Stz.

Da gibts was, das nennt sich Lookahead... ;-)

Code:
[b][size=18](?!\\)[/size][/b]("|')|^("|')

stz 5. Jul 2006 15:02

Re: regulärer Ausdruck: Anführungszeichen finden
 
Hi,
vielen Dank, ich glaube, sowas habe ich gesucht. Leider bekomme ich folgende Fehlermeldung mit deinem Code:
Code:
---------------------------
Unbenannt - MEdit
---------------------------
TRegExpr(comp): Urecognized Modifier (pos 5)
---------------------------
OK  
---------------------------
Wie gesagt, ich mach das mit SynEdit.

Gruß
Malte

Khabarakh 5. Jul 2006 15:25

Re: regulärer Ausdruck: Anführungszeichen finden
 
TRegExpr beherrscht keine Lookaheads? Das ist ja wirklich schlecht :gruebel: .
Der Lookahead ist aber sowieso falsch, hier wird ein Lookbehind benötigt:
Code:
(?<!\\)"|'
Aber wenn TRegExpr keine Lookaheads unterstützt, sieht es für Lookbehinds wohl auch schlecht aus ;) .
Ein Workaround:
Code:
(^|[^\\])('|")

stz 5. Jul 2006 15:34

Re: regulärer Ausdruck: Anführungszeichen finden
 
Zitat:

Zitat von Khabarakh
Aber wenn TRegExpr keine Lookaheads unterstützt, sieht es für Lookbehinds wohl auch schlecht aus ;) .

Leider ja, sehr schade...

Zitat:

Zitat von Khabarakh
Ein Workaround:
Code:
(^|[^\\])('|")

Da ist ja quasi das gleiche wie meine eigene Idee (s. Post #1), nur ein bischen anders verschachtelt, und damit bleibt leider auch mein Problem, dass ich immer das Zeichen vor dem Anführungszeichen mit zurückgegeben bekomme. Kann man da noch irgendwas tun, außer auf eine neue SynEdit-Version warten?

Gruß
Malte

S2B 5. Jul 2006 16:34

Re: regulärer Ausdruck: Anführungszeichen finden
 
Code:
(?:^|[^\\])('|")
Vielleicht kann er das ja... :wink:

stz 5. Jul 2006 16:43

Re: regulärer Ausdruck: Anführungszeichen finden
 
Zitat:

Zitat von S2B
Code:
(?:^|[^\\])('|")
Vielleicht kann er das ja... :wink:

Leider auch nicht...
Code:
---------------------------
Unbenannt - MEdit
---------------------------
TRegExpr(comp): Urecognized Modifier (pos 10)
---------------------------
OK  
---------------------------
langsam habe ich das Gefühl, TRegExpr ist nicht besonders up to date :(

andere Frage: Was ist das, was du mir da gepostet hast? Ich habe mich heute morgen ein wenig in REs reingelesen, aber sowas kam nicht vor...

Gruß
Malte

S2B 5. Jul 2006 17:18

Re: regulärer Ausdruck: Anführungszeichen finden
 
Bei PERL-kompatiblen Regulären Ausdrücken drückt (?: ) eine Klammer aus, die nicht mit zurückgegeben wird. :wink:

Khabarakh 5. Jul 2006 17:27

Re: regulärer Ausdruck: Anführungszeichen finden
 
Zitat:

Zitat von stz
Da ist ja quasi das gleiche wie meine eigene Idee (s. Post #1), [...]

Whoops, jetzt wo dus sagst... *g*
Ich nehme an, du musst den Regex als Property des SynEdits angeben und kannst somit keinen eigenen Code noch mit hineinschmuggeln? Wenn ja, sollte es doch zumindest eine weitere Property geben, bei der du die Capture Group, die ausgewertet werden soll, einstellen kannst.

[add]
@S2B: Es wird keine Capture Group erzeugt, das Ergebnis sollte aber das gleiche bleiben.
[/add]

stz 6. Jul 2006 13:22

Re: regulärer Ausdruck: Anführungszeichen finden
 
Zitat:

Zitat von Khabarakh
Ich nehme an, du musst den Regex als Property des SynEdits angeben und kannst somit keinen eigenen Code noch mit hineinschmuggeln?

Genau das ist mein Problem. :coder2:
Zitat:

Zitat von Khabarakh
Wenn ja, sollte es doch zumindest eine weitere Property geben, bei der du die Capture Group, die ausgewertet werden soll, einstellen kannst.

Leider nein, das wäre sonst auch eine gute Idee gewesen.
Zitat:

Zitat von Khabarakh
[add]
@S2B: Es wird keine Capture Group erzeugt, das Ergebnis sollte aber das gleiche bleiben.
[/add]

Jetzt wo ihr das schreibt entsinne ich mich wieder, sowas habe ich gestern morgen doch gelesen.

Danke und Gruß
Malte


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 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