Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   RegExp + am anfang eines wortes (https://www.delphipraxis.net/97040-regexp-am-anfang-eines-wortes.html)

Gruber_Hans_12345 3. Aug 2007 10:06


RegExp + am anfang eines wortes
 
ich verwende nun die "Perl Regular Expressions", und bin auf etwas draufgekommen, wo ich nicht weiss, ob das ein bug oder ein feature ist ;)

und zwar wollte ich suchen, ob ein text mit + anfängt
also hab ich folgendes probiert \b\+, nur sucht er mir das nicht ein \bT funktoniert und im text mitten drinnen funktioniert das \+ auch, nur am wortanfang nicht.
mit ^\+ funktioniert es auch nur in kombination mit \b nicht (übrigens die meisten anderen \ elemeten auch nicht wie [* ...)

mirage228 3. Aug 2007 10:19

Re: RegExp + am anfang eines wortes
 
Hi,

wie sahen denn deine konkreten RegExe aus?

Was ist wenn Du \w statt \b nimmst (ist dann halt keine Assertion mehr)? Hast Du die Option PCRE_MULTILINE aktiviert (diese beeinflusst das Verhalten von ^)?

Edit: Ansonten schau einfach mal hier: http://www.php.net/manual/de/referen...ern.syntax.php - Die Doku ist recht gut :)

mfG
mirage228

Gruber_Hans_12345 3. Aug 2007 10:44

Re: RegExp + am anfang eines wortes
 
mit \w findet er es auch nicht (allerdings hätte es mich auch gewundert, wenn er es mit \w finden würde, denn das würde ja ein fehler sein - oder nicht?)

ich möchte ienfach nur ein wort finden, das mit + anfängt

also so sieht mein aufruf aus

die funktionieren nicht
Delphi-Quellcode:
showmessage(TRegExpr.Pos('\b\+test', 'xxxx +test'));
showmessage(TRegExpr.Pos('\b\+test', '+test'));
da findet er was, aber (ich möchte ja gerne den anfang des wortes haben)
Delphi-Quellcode:
showmessage(TRegExpr.Pos(' \+test', 'xxxx +test'));
showmessage(TRegExpr.Pos('\+test', '+test'));

nein, verwende keinerlei zusätzlicher optionen (also alles standard)

mirage228 3. Aug 2007 11:22

Re: RegExp + am anfang eines wortes
 
Hi,

Mit dieser "Lookbehind"-Assertion sollte es gehen (siehe auch Erklärung dazu unter "Assertions" in der Doku von PHP-RegEx wie oben verlinkt):

Code:
(?<=\+)(\w+)
Der RegEx findet eine Wortkette mit mindestens einem Zeichen (\w+), welche ein "+" davor (?<=\+) hat.

Ich weiß aber nicht in wie fern TRegExpr für Delphi richtige Assertions unterstützt, ich verwende selbst die PCRE-Unit von http://www.renatomancuso.com/software/dpcre/dpcre.htm

mfG
mirage228

Gruber_Hans_12345 3. Aug 2007 11:30

Re: RegExp + am anfang eines wortes
 
also ich verwende im moment folgendes :

Delphi-Quellcode:
showmessage(TRegExpr.Pos('(^| )\+test', '+test'));
damit finde ich auch alles was ich will ... und ist einfach zu verwenden verstehen als das lookbehind

nur mich hätte es interessiert, warum das \b bei einem + nicht funktioniert ...

mirage228 3. Aug 2007 11:35

Re: RegExp + am anfang eines wortes
 
Zitat:

Zitat von Gruber_Hans_12345
nur mich hätte es interessiert, warum das \b bei einem + nicht funktioniert ...

Das + muss ja auch zuerst und dann die Word-Boundary-Assertion (\b) ;)

Delphi-Quellcode:
\+\b
Habs mal probiert, matched bei einem + vor einem Wort (aber auch Zahlen!), und ansonsten nicht :)

Edit: Beachte noch den Hinweis zu \b:
Zitat:

A word boundary is a position in the subject string where the current character and the previous character do not both match \w or \W (i.e. one matches \w and the other matches \W), or the start or end of the string if the first or last character matches \w, respectively.
mfG
mirage228

Gruber_Hans_12345 3. Aug 2007 11:49

Re: RegExp + am anfang eines wortes
 
Zitat:

Zitat von mirage228
Das + muss ja auch zuerst und dann die Word-Boundary-Assertion (\b) ;)

Delphi-Quellcode:
\+\b
Habs mal probiert, matched bei einem + vor einem Wort (aber auch Zahlen!), und ansonsten nicht :)

das problem ist, das ist das ja nicht will
es soll ja "nur" folgendes gefunden werden "+test" " +test" aber nicht "s+test" also, mir ging es darum, das VOR dem + nur ein zeilenanfang oder ein treenzeichen sein darf

aber mit der erklärung von \b ist mir jetzt klar, warum das nicht funktioniert, daher funkt es anscheinend nur mit dem was ich opben geschrieben habe also dem (^| )


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