![]() |
Regex: Frage zur abfrage
Hallo DPs, :hi:
Ich hab eine frage wie ich das realisieren kann. Also erst mal meine momentane abfrage:
Code:
Mein text:
(^|\b)(?<text>[a-zA-ZäöüÄÖÜß]*)(\b|$)
Zitat:
Zitat:
also meine gedachte regel: mindestens ein buchstaben in dem Wort, ist dann halt erlaubt. aber wie sage ich den das ? hier das hab ich probiert aber es funktioniert nicht wirklich:
Code:
der fehler ist: (?( aber das ist doch die anweisung für If then oder?
(^|\b)(?([a-zA-ZäöüÄÖÜß]{1,}[0-9])<text>[a-zA-ZäöüÄÖÜß0-9]*)(\b|$)
Diese ![]() Ich hoffe ihr habt eine Geniale lösung (es würde mich wundern wenn nicht :-D ) MfG Chefx :mrgreen: |
Re: Regex: Frage zur abfrage
Zitat:
![]()
Code:
(?<text>[a-zA-ZäöüÄÖÜß]+\d*)
|
Re: Regex: Frage zur abfrage
da würde sich sowas anbieten:
Code:
(^|\b)(?<text>[a-zA-ZäöüÄÖÜß][a-zA-ZäöüÄÖÜß0-9]*)(\b|$)
|
Re: Regex: Frage zur abfrage
Voraussetzung:
Zitat:
Zitat:
Splittet einen Match bei numerischen Zeichen innerhalb eines Wortes Zitat:
Da Deine Komponente Posix-Zeichenklassen beherrscht, probiere es mal so: (ich gehe davon aus, dass Du mehrere numerische Zeichen in einem Wort zulassen willst, und nur Wörter ausschließen willst, die ausschließlich aus numerischen Zeichen bestehen):
Code:
\b[[:alnum:]]*[[:alpha:]]+[[:alnum:]]*\b
|
Re: Regex: Frage zur abfrage
ok das funktioniert aber ich hab probleme mit den ÄÖÜß, weil alnum das ja nicht mit drin hat.
Code:
aber der macht die jetzt einzeln, bsp:
\b[[:alnum:]äöüÄÖÜß]*[[:alpha:]äöüÄÖÜß]+[[:alnum:]äöüÄÖÜß]*\b
Zitat:
Zitat:
|
Re: Regex: Frage zur abfrage
vielleicht so?
\b[:alnum:äöüÄÖÜß]*[:alpha:äöüÄÖÜß]+[:alnum:äöüÄÖÜß]*\b |
Re: Regex: Frage zur abfrage
ne das funktioniert leider nicht.:gruebel:
|
Re: Regex: Frage zur abfrage
hab schon andere varianten probiert aber sorichtig funktioniert das nicht :cry:
Code:
geht auch nicht (kommt ein fehler von der Regexkomponente)
\b[a-Za-z0-9äöüÄÖÜß]*[a-Za-zäöüÄÖÜß]+[a-Za-z0-9äöüÄÖÜß]*\b
|
Re: Regex: Frage zur abfrage
Uff, da das ja wirklich die Minimal-Version ist: Sagt der Fehler irgendetwas Genaueres?
Edit: Du meinst wohl eher "[A-Z..."? |
Re: Regex: Frage zur abfrage
ohja stimmt, :lol:
aber der trennt immer noch das äöü vom wort ab (wie oben) aber warum denn? :gruebel: |
Re: Regex: Frage zur abfrage
Lass mal die Wortgrenzen weg; damit scheint die Komponente, respektive die PCRE-Lib, Probleme zu haben.
Ich habe mal eine Support-Anfrage gestellt. |
Re: Regex: Frage zur abfrage
Zitat:
|
Re: Regex: Frage zur abfrage
Code:
\b
|
Re: Regex: Frage zur abfrage
könnte ich mir da auch eine \b selbst erstellen, weil der sucht ja alles zusammen was den im weg kommt :stupid:
|
Re: Regex: Frage zur abfrage
Zitat:
|
Re: Regex: Frage zur abfrage
sorry vielleicht dumm ausgedrückt :-D
Er soll ja nacht Wörtern suchen und da brauch ich ja eine Beschränkung (also leerzeichen bis leerzeichen usw.). also der Beispieltext: Zitat:
Zitat:
Code:
ich hab das so probiert aber da findet der nix
(\f|\n|\r|\t|\v) [A-Za-z0-9äöüÄÖÜß]*[A-Za-zäöüÄÖÜß]+[A-Za-z0-9äöüÄÖÜß]*(\f|\n|\r|\t|\v)
|
Re: Regex: Frage zur abfrage
sorry das ich pushen muss, :roll:
aber ich brauch das jetzt richtig dringend. Ich weiß das ihr keine Roboter seit aber vielleicht hat ja noch einer eine Idee (Bitte nicht hauen) :-D Ich hab auch diese Variante probiert aber das hat auch nicht geklappt:
Code:
[^A-Za-z0-9äöüÄÖÜß]+ [A-Za-z0-9äöüÄÖÜß]*[A-Za-zäöüÄÖÜß]+[A-Za-z0-9äöüÄÖÜß]*[^A-Za-z0-9äöüÄÖÜß]+
|
Re: Regex: Frage zur abfrage
Also das Problem ist, dass \b auch Umlaute als Wortgrenzen interpretiert. Es gilt nun also, Dir mittels bspw. Lookarounds selber Wortgrenzen zu 'bauen', die das nicht tun.
|
Re: Regex: Frage zur abfrage
Zitat:
Delphi-Quellcode:
sollte also funktionieren, siehe z.B.
[A-Za-z0-9äöüÄÖÜß]*[A-Za-zäöüÄÖÜß]+[A-Za-z0-9äöüÄÖÜß]*
![]() |
Re: Regex: Frage zur abfrage
Also bei mir funktioniert das Ganze auch ohne Wortgrenzen; logisch, da \p{N} und \p{L} (Unicode wg. Umlauten) keine Whitespaces berücksichtigen. Somit ist bei einem gefundenen Whitespace (auch Ende eines Wortes) Sense. Und da sie, wie Khabarakh richtigt sagt, von Natur aus gierig sind, findet die Engine alle Vorkommen in Deinem Text.
Code:
liefert mir für folgenden Text
[\p{N}_]*[\p{L}_]+[\p{N}_]*
Zitat:
Zitat:
Edit: zu spät. |
Re: Regex: Frage zur abfrage
ich glaub es liegt entweder an der Komponente oder mein Code hat einen hacken :gruebel:
(hab noch ein paar tage zeit bekommen :-D )
Delphi-Quellcode:
vielleicht ist hier der Fehler?
var
code: array of string; regexMachine: TPerlRegEx; begin SetLength(code, 0); //Array initialisieren SetLength(pos, 0); // regexMachine := TPerlRegEx.Create(nil); try regexMachine.RegEx := '[A-Za-z0-9äöüÄÖÜß]*[A-Za-zäöüÄÖÜß]+[A-Za-z0-9äöüÄÖÜß]*'; // mit dem [\p{N}_]*[\p{L}_]+[\p{N}_]* hab ich es auch versucht hat auch nicht funktioniert regexMachine.Subject := 'hallo was machst du'; regexMachine.Options := regexMachine.Options + [preUnGreedy]; if regexMachine.Match then begin repeat setlength(code, Length(code) + 1);// Treffer um neu gefundenen erweitern code[Length(code) - 1] := regexMachine.MatchedExpression;// Neue Treffer in das code Array eintragen until not regexMachine.MatchAgain; // und weitersuchen. Abbruch, wenn kein Treffer mehr end; memo1.Lines.add(code[0]); finally regexMachine.free; end; |
Re: Regex: Frage zur abfrage
Kann den Code hier nicht testen, da ich die Komponente hier nicht installiert habe.
Oben wurde gesagt, dass alle Wörter matchen, da die RegEx gierig ist, und somit alles frisst, was sie finden kann. In diesem Zusammenhang sieht mir folgendes etwas merkwürdig aus:
Delphi-Quellcode:
Desweiteren meine ich, mich erinnern zu können, dass die Matches mit
regexMachine.Options := regexMachine.Options + [preUnGreedy];
Delphi-Quellcode:
abgefragt werden.
regexMachine.SubExpressions[...]
|
Re: Regex: Frage zur abfrage
[quote="MarioM."]
In diesem Zusammenhang sieht mir folgendes etwas merkwürdig aus:
Delphi-Quellcode:
Was soll ich deiner Meinung nach machen?
regexMachine.Options := regexMachine.Options + [preUnGreedy];
Wenn du das meinst:
Delphi-Quellcode:
verändert es sich auch leider nicht.
regexMachine.Options :=[preUnGreedy];
Das mit regexMachine.SubExpressions[...] hatte ich auch schon. Was nimmst du für eine Kompo? |
Re: Regex: Frage zur abfrage
Zitat:
|
Re: Regex: Frage zur abfrage
Zitat:
![]() Desweiteren kann es nicht schaden, wenn Du Dir ein kleines Tool zulegst, mit dem Du Deine RegEx testen und debuggen kannst. Da Du die PerlRegEx-Komponente einsetzt, liegt es nahe, Dein Taschengeld in den ![]() |
Re: Regex: Frage zur abfrage
Zitat:
Ich werde mir die Links mal anschauen (ein Buch darüber ist bestimmt nicht verkehrt :mrgreen: ). Danke für eure ganzen Antworten :thumb: :thumb: MfG Chefx |
Re: Regex: Frage zur abfrage
Hallo,
Zitat:
Nee, mal im Ernst; 'Der Friedl' - oder auch das 'Eulenbuch' genannt, ist das Standardwerk, wenn es um RegEx geht. Und man lernt beim Lesen nicht nur etwas über die Regulären Ausdrücke, sondern auch noch ein bissel Perl, was dem ein oder anderen vielleicht Lust auf mehr macht. Begleitend dazu würde ich noch diese kleine ![]() Und natürlich das Tool, das Mario oben schon empfohlen hat. Die Programme von JG-Soft sind, was Reguläre Ausdrücke betrifft, wirklich genial - besonders auch PowerGREP, was auf den ersten Blick recht teuer erscheint, aber für mich bisher jeden Cent wert war! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 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-2025 by Thomas Breitkreuz