RegEx: Zirkumflex wird nicht erkannt

Hallo,

da Regex in der Basic-IDE nur bedingt verfügbar ist,
habe ich einen Codeteil in Writer eingefügt und wollte
per RegEx vor jeder Zeile ein "REM " schreiben lassen.

Suche:
^

Ersetze:
REM \1

Aus der Hilfe für LibreOffice 7.0:

^
The beginning of a paragraph or cell.
Special objects such as empty fields or character-anchored frames,
at the beginning of a paragraph are ignored.
Example: "^Peter" matches the word "Peter" only when it is the first
word of a paragraph.

Wenn ich dies richtig verstehe, wird nur der Anfang eines Absatzes gefunden.
Der Anfang einer Zeile bei einem Zeilenumbruch nicht.
Demnach sollte beim Ersetzen mindestens die erste Zeile geändeter werden:
REM Sub MeinProgramm

Dies geschieht nicht.

Ist meine RegEx-Syntax für Writer falsch?
Wie lautet die korrekte RegEx-Syntax für: Ersetze jeden Zeilenanfang
durch [REM + Leerschritt]?

PS
In Notepad++ funktioniert meine Syntax einwandfrei, in Writer
wird mir in der Suchzeile das Zirkumflex rot markiert.

Viele Grüße

Jürgen

Hallo Jürgen,

RegExp wird in der BasicIDE sehr umfassend unterstützt. Schau mal hier: https://www.magentacloud.de/share/iat7ym.wb2#$/

Ich habe mit BasicMakro und RegExp einen kompletten CodeColorizerBasic realisiert.

^ allein funktioniert nicht, aber beispielsweise funktioniert: ^.*$

Warum ? ^ bedeutet erst mal: Finde ab Zeilenanfang. Und was soll ab Zeilenanfang gefunden werden ? Im Hilfe-Beispiel ist es "Peter".

Nach dem ^ muss schon noch was kommen. Beispielsweise: ^.*$ (= vom Zeilenanfang (^) - beliebige Zeichen (.*) - bis Zeilenende ($))

Viele Grüße
Hans-Werner :-))

------ Originalnachricht ------

Hallo Hans-Werner,

vielen Dank für Deine Rückmeldung.

RegExp wird in der BasicIDE sehr umfassend unterstützt.

Ich habe schon das eine oder andere gefunden,
was in Writer funktioniert, aber in der IDE nicht.
So auch jetzt.

Ich bin Deiner Anleitung gefolgt:
Suche:
^(.*)$

Ersetze:
REM $1

Ergebnis in Writer: :slight_smile:
REM Sub Main

REM End Sub

Hallo Jürgen,

Du möchtest in einem BasicMakro in jeder Zeile ein "REM " voranstellen.

Die " sind nicht anzugeben, sind hier nur zur Abgrenzung der regulären Ausdrücke gegenüber dem Text angegeben. Sind kein Bestandteil des regulären Ausdrucks.

SUCHE "^.*$" und ERSETZE "REM $0" oder "REM &".

Wenn auch Leerzeilen ein "REM " vorangestellt bekommen sollen, muss SUCHE etwas erweitert werden: "^(.*|\n)$"

"[...] & oder $0 - Fügt dem Begriff im Feld Ersetzen die Zeichenfolge hinzu, die anhand der Suchkriterien im Feld Suchen gefunden wurde, wenn Sie eine Ersetzung vornehmen. Wenn Sie beispielsweise "Tür" in das Feld Suchen und "&griff" in das Feld Ersetzen eingeben, wird das Wort "Tür" durch "Türgriff" ersetzt. [...]"

Warum Du "$1" verwendest, verstehe ich nicht wirklich, dass "$0" oder "&" reichen völlig aus. Das "$1" ist für speziellere SUCHEN/ERSETZEN gedacht. Kann man verwenden, muss man aber nicht:

"[...] Mit dem regulären Ausdruck "\b(Frucht|Gemüse)\b" im Feld "Suchen" und dem regulären Ausdruck "$1saft" im Feld "Ersetzen" können Vorkommen der Wörter "Frucht" und "Gemüse" durch die Wörter "Fruchtsaft" und "Gemüsesaft" ersetzt werden, ohne die Wörter "Fruchtsäfte" und "Gemüsesäfte" zu beeinflussen. [...]"

Dein "Ergebnis in der IDE: :(" kann ich bestätigen. Da scheint das gesetzte Häkchen bei "Reguläre Ausdrücke" keinerlei Wirkung zu haben (LO 6.4.7.2 (x64)).

Das könnte ein BUG sein.

Da müssten jetzt mal noch andere des Forums einen kleinen Test machen, ob sie das auch bestätigen können.

Viele Grüße
Hans-Werner :-))

------ Originalnachricht ------

Hallo Hans-Werner,

habe Deine Beispiele durchgetestet.

SUCHE "^.*$" und ERSETZE "REM $0" oder "REM &".

• In Writer immer funktionierend.
• In der IDE nie funktionierend.

Wie ich bereits schrieb, gibt es RegEx-Funktionen,
welche in Writer funktionieren in der IDE nicht.
Dies Problem besteht schon lange, min. Version 5.xx
Konkrete Beispiele habe ich mir nicht gemerkt.

Solange die Funktionen in Writer funktionieren, ist dies für mich völlig
ausreichend.
Das Ergebnis unserer kleinen Unterhaltung ist, dass meine anfängliche
Anfrage, meine zurerst gepostete Syntax so in Writer nicht zu verwenden ist.

Dank Deiner Hilfe habe ich nun eine Syntax, welche in Writer
funktioniert und ja, was RegEx betrifft bin ich ein Anfänger.

Warum Du "$1" verwendest, verstehe ich nicht wirklich,

Ich weiß nicht mehr in welchem Tutorial ich dies aufgeschnappt habe,
ist lediglich eines meiner vielfältigen Versuche Writer zu überreden.

Da müssten jetzt mal noch andere des Forums einen kleinen Test machen,
ob sie das auch bestätigen können.

Ein funktionierendes RegEx in der IDE, wäre zumindest für mich sehr
hilfreich.
Ein Grund:
Ein guter Programmierstil macht zwar Kommentare überflüssig.
Aber, da ich in Foren als Helfer unterwegs bin, muss ich den Code mit
Kommentaren spicken damit die TE's mein Geschreibsel verstehen.
und weitere Gründe...

Ich würde mich freuen, wenn es in Zukunft eine ausgreiftere Basic-IDE gibt.
In Ansätzen sehe ich Verbesserungen:
Wenn in den Optionen "experimentelle Funktionen" aktiviert wird, dann
kann man
nach einem Neustart die unter LibreOffice → Basic-IDE, das Verhalten der
IDE steuern.

Aber mit einem im Augenblick noch großem Wermutstropfen:
Zitat: LibreOffice-Hilfe → Basic-IDE

Die Verwendung von erweiterten Typen in Basic-Programmen kann die
Kompatibilität des Programms zu anderen Office-Paketen einschränken.

Naja, was nicht ist , kann ja noch werden. :slight_smile:

Viele Grüße

Jürgen