Regex in FIND

Getting started ... Alles für einen gelungenen Start.
18 Beiträge • Seite 1 von 2 (current) Nächste
18 Beiträge Seite 1 von 2 (current) Nächste

Regex in FIND

Beitrag von hugo.data (ForumUser / 20 / 0 / 0 ) »
Hallo,

wie muss ein regulärer Ausdruck aussehen, um den Contains Pattern (*) zu ersetzen.
Beispiel CP 'A*B' findet ja z.B ASDFGB oder ACB oder AB usw.

Wie muss dazu ein Regulärer Ausdruck aussehen damit dieselbe Suche durchgeführt wird?

Besten Dank.

Gruß
Hugo.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Regex in FIND

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
Das würde (greediness berücksichtigt) so aussehen:
A[^B]*B

Re: Regex in FIND

Beitrag von hugo.data (ForumUser / 20 / 0 / 0 ) »
fr-g hat geschrieben:Das würde (greediness berücksichtigt) so aussehen:
A[^B]*B
Wird da auch 'A.01B' gefunden. Bei CP geht das ja.

Re: Regex in FIND

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
Das müsste gefunden werden. Du kannst Regexe mit dem Programm DEMO_REGEX_TOY testen ;)

Fraglich wäre halt noch, was du bei einem solchen String für ein Verhalten haben möchtest:
ABB

Möchtest du 'AB' als Match, nimmst du den oben genannten Regex. Möchtest du 'ABB' als Match, nimmst du 'A.*B' als Regex.

Re: Regex in FIND

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Da nur CP nachgebildet werden soll ist der Match eigentlich egal, so dass es auf A.*B hinausläuft mit Abfrage des Sy-Subrc.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Regex in FIND

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
Das stimmt, ich wollte nur auf die Problematik hinweisen, weil man fast nie einen Regex mit '.*' haben möchte ;)
Interessant wäre (bei einem größerem Textumfang) ein Performancevergleich.

Re: Regex in FIND

Beitrag von hugo.data (ForumUser / 20 / 0 / 0 ) »
black_adept hat geschrieben:Da nur CP nachgebildet werden soll ist der Match eigentlich egal, so dass es auf A.*B hinausläuft mit Abfrage des Sy-Subrc.
Das funktioniert leider nicht richtig. Vor allem, wenn in einer Tabelle gesucht wird.

Re: Regex in FIND

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
CP A*B berücksichtigt Anfang und Ende eines Strings.

Der Ausdruck \A.*B\Z sollte in einem String dem CP A*B entsprechen.
Alternativ funktioniert auch ^A.*B$
The operators \A and \z are used as anchor characters for the offset in front of the first character in a character string and the offset behind the last character of a character string. This means that the operator \A always finds the offset 0. In a string of type string, \z finds the offset behind the last character. In text fields of type c, trailing blanks are respected, which means that \z always finds the offset behind the defined length.

As well as \z, there is another operator \Z for the end of a character string. The operator \Z works like \z, except that all line breaks at the end of the character string are ignored.

Note

If a character string does not contain any control characters, the operators ^, $ and \A, \z, \Z behave in the same way.

Re: Regex in FIND

Beitrag von hugo.data (ForumUser / 20 / 0 / 0 ) »
Mein Coding sieht so aus:

FIND REGEX 'p.*o' IN TABLE lt_texte IN CHARACTER MODE IGNORING CASE RESULTS lt_results1.

Die Tabelle lt_texte:

1 ZWEISTUFIGE GEGENDRUCKBLENDE GEMÄSS ANGEHÄNGTER AKTUELLER MSK (SIEHE ANHANG), BESTEHEND AUS:
2 1. VFL PN250 WIE AUF MSK DARGESTELLT. GEFERTIGT AUS SCHEIBE D=600 UND L=150MM.
3 WERKSTOFF 1.0352/P245GH GEM. EN 10222-2 UND EN 10060. MIT ABNAHME 3.1 EN 10204
4 2. ROHR 219,1X22,2 EN 10216-2. WERKSTOFF 1.0425/P245GH. L=1100MM. MIT ABNAHME 3.1 EN 10204
5 3. ADAPTER RING (2 STCK. PRO BLENDE). GEFERTIGT AUS RING 280ABX210ABX80B ÄHNLICH SN 024958.
6 4. LOCHBLENDE (2 STCK. PRO EINHEIT) AUS 1.4306. GEFERTIGT AUS RUNDSTAB
7 D=210 MM. DAZUGEHÖRIGE HSV: 302111.
8 MATERIALBEDARF PRO LOCHBLENDE: 30 MM.
9 LOCHBILD PASSEND FÜR KVS 240 LIN.
10 FESTLEGUNG LOCHBILD IM AUFTRAGSFALL.
11 FÜR AUFWANDSERMITTLUNG: 64 BOHRUNGEN MIT D=12 MM.
12 5. SCHWEISSRING (2 STCK. PRO EINHEIT) AUS 1.0038.
13 GERFERTIGT AUS RING 210ABx170ABx10B.
14 DAZUGEHÖRIGE HSV: 302334.
15 ZUR INFO SIEHE AUCH SACH-NR. 024958.
16 BITTE PRÜFEN, OB EIGENFERTIGUNG MÖGLICH, ANSONSTEN ANFRAGEN.

Gefunden wird nur in Zeile 5: PTER RING (2 STCK. PRO
nicht jedoch das Wort PRO in den Zeilen 6,8 und 12.
Warum?

Re: Regex in FIND

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
Dele hat geschrieben:CP A*B berücksichtigt Anfang und Ende eines Strings.
Sicher?

Bei dem String 'aABb' verhält sich CP 'A*B' anders als der Regex '^A.*B$'. Edit: Natürlich Quatsch :D Benutze CP so gut wie nie und bin schon über case-sensitivity gestolpert...

Wie man merkt, muss man bei Regexen immer sehr genau wissen, was man haben möchte ;) Ich würde vorläufig immer non-greedy mit [^] suchen....weil ohne Backtracking ist das wohl auch schneller.
Zuletzt geändert von fr-g am 22.10.2018 16:52, insgesamt 1-mal geändert.

Re: Regex in FIND

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
hugo.data hat geschrieben:Warum?
Eben genau wegen der von mir erwähnten greediness :roll:
Dann solltest du vielleicht noch an OCCURENCES denken ;)

Vielleicht schreibst du nochmal genau, was du jetzt suchen möchtest.
Zuletzt geändert von fr-g am 22.10.2018 16:53, insgesamt 1-mal geändert.

Re: Regex in FIND

Beitrag von hugo.data (ForumUser / 20 / 0 / 0 ) »
Wie sollte dann im o.g. Fall der Suchstring aussehen?

OCCURENCES ist wohl nicht nötig, da bei einer Suche nach 'PRO' (also ohne REGEX) alle gefunden werden.

Re: Regex in FIND

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
hugo.data hat geschrieben:Wie sollte dann im o.g. Fall der Suchstring aussehen?

OCCURENCES ist wohl nicht nötig, da bei einer Suche nach 'PRO' (also ohne REGEX) alle gefunden werden.
Du möchtest also CP 'P*O' "finden"? Dann such mal nach '^P[^O]*O$'.

Re: Regex in FIND

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
fr-g hat geschrieben:
hugo.data hat geschrieben:Wie sollte dann im o.g. Fall der Suchstring aussehen?

OCCURENCES ist wohl nicht nötig, da bei einer Suche nach 'PRO' (also ohne REGEX) alle gefunden werden.
Du möchtest also CP 'P*O' "finden"? Dann such mal nach '^P[^O]*O$'. Edit: jetzt habe ich mich von der Anmerkung eben durcheinanderbringen lassen. Du suchst ja nicht am Zeilenanfang, sondern an den Wortgrenzen: '\bP[^O]*O\b'

Re: Regex in FIND

Beitrag von hugo.data (ForumUser / 20 / 0 / 0 ) »
Ich möchte alles finden wie CP 'P*O'.
Also alle Vorkommen von dem Wort PRO, aber auch z.B. Pergamo

Meine Vorgehensweise ist im Augenblick so, dass ich im Suchstring den der User eingibt, den Asterisk durch '.*' ersetze. Asteriske am Anfang und Ende werfe ich raus.

So wie du das vorschlägst '^P[^O]*O$' funktioniert gar nicht.

Vergleichbare Themen

2
Antw.
714
Views
Regex in FIND erste Zeichen prüfen.
von msfox » 02.10.2023 11:27 • Verfasst in ABAP® für Anfänger
1
Antw.
6297
Views
Befehl Find
von robz » 16.11.2006 13:24 • Verfasst in ABAP® Core
2
Antw.
7174
Views
Where i can find SAP documentation?
von sri_deep » 09.08.2005 18:50 • Verfasst in Development Related
1
Antw.
6533
Views
How to find the tcode for sapscript printprogram
von sri_deep » 09.08.2005 18:58 • Verfasst in Development Related
1
Antw.
22344
Views
logische Datenbanken - wie find ich diese und Inhalt
von Thomas82515 » 25.08.2008 17:27 • Verfasst in Basis

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 753
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2377
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8962