$meta_sep und der "n." Eintrag

Heute mehr eine "How To"-Frage:

Ich will in bestimmten Feldern - z.B. Artist - alle Felder anzeigen lassen, bei denen am Anfang oder Ende Leerschläge, doppelte Leerschläge sind oder die mit "The ", "Der ", "Die ", "Das " beginnen.

Momentan mache ich dies mit

("$meta_sep(composer,\\)" MATCHES "^\s+|\s+$|\s\\|\\\s|\s\s+|^The |^Die |^Das |^Der |\\The |\\Die |\\Das |\\Der ")

Ich finde es ein bisschen "nervig", dass man jede mögliche Zeichenkette sowohl mit ^ als auch mit dem Seperator \ schreiben muss. Geht das auch einfacher?

Hattest du nicht schon einen Vorschlag für einen Filter, der auf führende und folgende Leerzeichen prüft hier bekommen:

Für die Artikel könntest du so einen Ausdruck verwenden:
$ifgreater($strstr($replace($lower(\\$meta_sep(title,\\)),\\the ,###,\\der ,###,\\die ,###),###),0,Yes,no)

Ja, habe ich, der funktioniert auch - aber es geht in meiner Frage ja gar nicht darum, WIE ich es mache, sondern ob es nicht einen einfacheren Weg gibt. Das WIE habe ich mir ja mit Deiner Hilfe von "damals" bereits selbst gebastelt:

"$meta_sep(composer,\\)" MATCHES "^\s+|\s+$|\s\\|\\\s"

aber der macht ja eben das, was ich gerade hinterfrage, er prüft sowohl auf ein Muster für den 1. Composter (^\s+) als auch auf ein Leerzeichen für den 2.-n. Composer über \\s .

Daher habe ich es auf

"$meta_sep(composer,\\)" MATCHES "^\s+|\s+$|\s\\|\\\s|^The |^Die |^Das |^Der |\\The |\\Die |\\Das |\\Der "

erweitert, das funktioniert auch. Ich muss aber bei jedem Eintrag (Der, Die, Das...) sowohl die "^" als auch die "\" Möglichkeit abprüfen und da fragte ich mich, ob es dafür eine Vereinfachung gibt, die ich noch nicht kenne...

Ich habe es jetzt für den Filter wie obenstehend und als Funktion mit

$if($neql($regexp($meta_sep(composer,§),'&|;|^\s+|\s+$|\s+§|§\s+|\s§|\s\s+|§\s|feat\.|featuring|Feat\.|Featuring|^The |^Die |^Das |^Der |§The |§Die |§Das |§Der |\(\+|\w+\s{2,}\w+|\"',''),$meta_sep(composer,§)),❌,$if($eql($regexp($meta_sep(composer,§),'[^a-zA-Z0-9äöüÄÖÜ=ß ''\-\(\)\/:\.\?!#\+@_%§\*]',''),$meta_sep(composer,§)),,❌))

gelöst (ich verwende inzwischen das § statt \ , damit ich auch einzelne \ oder eben \\\ als fehlerhafte Separatoren angezeigt bekomme).

"Einfacher" scheint es wohl nicht zu gehen...

Wenn ich das richtig verstehe, ist es doch erstmal völlig egal, ob auf die randständigen Leerzeichen dann noch ein Artikel folgt oder nicht - die Leerzeichen sollen doch schlussendlich sowieso weg.
Wenn du dir meinen Ausdruck ansiehst
$ifgreater($strstr($replace($lower(\\$meta_sep(title,\\)),\\the ,###,\\der ,###,\\die ,###),###),0,Yes,no)
bemerkst du vielleicht die beiden \\ vor $meta_sep().
Dies führt dazu, dass das geprüfte Feld immer mit \\ anfängt, ich also nie auf den Beginn mit ^ prüfen muss.
Die Liste der dann folgenden Artikel kann einfach in $replace() verlängert werden, falls auch italienisch, französisch oder spanisch oder was auch immer dazukommen sollte.
Warum jetzt Leerzeichen und Artikel in einem Ausdruck abgehandelt werden müssen, erschließt sich mir nicht.

Weil ich für jedes Feld EINEN Filter habe, der mir dann anzeigt "Hier ist was falsch/zu checken..." - dann lasse ich über alle diese Files meine Korrekturgruppe drüber laufen, gucke dann, was immer noch "falsch/zu checken" ist - und dann wird es entweder in die Korrekturgruppe aufgenommen oder bleibt stehen.

Warum EIN Filter?
Weil zwei Filter doppelte Arbeit bedeuten - ich will das alles in einem Rutsch.

Und warum ich nicht alles in der Korrekturgruppe abfange, habe ich gestern wieder gemerkt - da darf zwar gerne aus "Die Flippers" -> Flippers oder aus "The Bee Gees" werden, aber bitte nicht aus "Die Happy" -> Happy oder aus "The The" -> The (oder aus dem belgischen Sänger The Lau -> Lau... :wink:

Damit meinte ich, dass die Filterausdrücke auch über ein "OR" verknüpft werden können und so in separate Teile aufgeteilt wartbarer werden.
Es wäre also nicht nötig, einen langen regulären Ausdruck zu erzeugen, der dann wiederum Redundanzen aufweist.

Hm, genau das mache ich doch ...

Klar kann man noch ein OR .. anfügen.... . verstehe aber den Sinn nicht oder konkret:
Wie würdest Du es als Filter schreiben?

Hier meine Lösung:

(("$meta_sep(composer,§)" MATCHES "^\s+|\s+$|\s§|§\s|\s\s+|^The |^Die |^Das |^Der |§The |§Die |§Das |§Der ") OR (NOT "$meta_sep(composer,§)" MATCHES "^[a-zA-Z0-9äöüÄÖÜ=ß \-\(\)\/:\.\?!#\+_%\*\'§]+$")) AND (NOT %composer% MATCHES (^$))

könnte werden zu "$meta_sep(composer,§)" MATCHES "^\s+|\s+$|\s§|§\s|\s\s+" OR "$ifgreater($strstr($replace($lower(\\$meta_sep(composer,\\)),\\the ,###,\\der ,###,\\die ,###),###),0,Yes,no) IS YES"

Aber ist das kürzer?!

Kürzer heißt ja nicht unbedingt übersichtlicher. Ich habe mein Augemerk eher auf die Vermeidung von

Bei meinem Vorschlag muss jeder Artikel (oder welches Wort da am Anfang sonst gefunden werden soll) nur 1x definiert werden.

Da hast Du Recht. Ich finde da nur tatsächlich das anhängen der "doppelten" Zeichenketten übersichtlicher als die If/Yes/No Verschachtelung (die ich in Filtern auch ehrlich gesagt noch nie verwendet habe, werde mir das später am Rechner mal anschauen...)