VOLLTEXTSUCHE mit RegEx(*) in a35 oder a99 

 [Übersetzung der engl. Version]


Ein "Regulärer Ausdruck" (engl. "Regular Expression" oder RegEx) ist eine Zeichenfolge, die nach bestimmten Regeln gebildet ist. Diese Regeln eignen sich zum Durchsuchen von Texten. Der einfachste RegEx ist ein Wort = eine Folge von Buchstaben. Doch wenn es sehr große Datenmengen sind, reicht es nicht aus, nur nach einzelnen Wörtern suchen zu können. Deshalb haben sich Entwickler etwas Besseres ausgedacht - eben RegEx.

Die RegEx-Volltextsuche funktioniert ganz anders als die normale Suche, die mit alphabetisch geordneten Registern arbeitet, und zwar geht es so: Datensätze werden von Anfang bis Ende Zeichen für Zeichen verglichen mit der Zeichenfolge, die man suchen will. Dabei gibt es aber noch zusätzliche Finessen, die mit der Indexsuche nicht möglich sind, vor allem die Maskierung. 
Damit ist klar: Die RegEx-Suche findet auch Inhalte, die nicht indexiert sind und daher mit der normalen Suche gar nicht auffindbar. Besonders nützlich ist dies auch zum Entdecken fehlerhafter und uneinheitlicher Datenelemente, um diese dann korrigieren zu können.

WICHTIG: Manche Suchprobleme verlangen Kenntnisse der Datenstruktur, besonders wenn man Angaben in bestimmten Feldern sucht. Ein Instrument für Endnutzer ist RegEx daher nicht.

Das a35-Suchformular hat ein Feld "MaxHits" (= Max. Trefferzahl) mit dem Standardwert 100. Hier kann man jede andere Zahl einsetzen. Tip: Bei großen Datenbanken lässt sich mit dem Wert 1 meistens schnell feststellen, ob es überhaupt Treffer gibt.  Dagegen 0 oder * als Eingabe bedeutet "unbegrenzt", doch kann eine exorbitant große Treffermenge in sehr großen Datenbanken auch problematisch sein oder wenig nützlich.
Es folgen die Regeln für reguläre Ausdrücke.

1. EINZELNE ZEICHENFOLGE ALS SUCHBEGRIFF

Eine Zeichenfolge ist eine Folge von Buchstaben, Ziffern, Sonderzeichen und evtl. Leerzeichen - es braucht kein Wort zu sein.  Es kann sich z.B. auch um eine Kategorienummer handeln mit dem # als erstem Zeichen.

Beispiele

RegEx  kraft
findet:
Datensätze, die kraft enthalten, z.B. auch Kernkraftwerk
Hinweis: Alle Buchstaben werden auf klein umgestellt und Umlaute aufgelöst (ä -> ae), bei der Eingabe braucht man darauf nicht zu achten: Eingabe von Koeln findet daher auch Köln und altkölnisch.

RegEx  #402
findet:
Datensätze, die das Feld #402 enthalten - egal was drinsteht.
Hinweis:
Wenn #402  innerhalb eines Datenfelds vorkommt, wird es auch gefunden.

RegEx  kölner karneval
findet: Datensätze, in denen z.B.  Kölner Karnevalsverein vorkommt,
aber findet nicht den Kölner Kinderkarneval. (Dazu siehe 2.)

2. MASKIERUNG

Mit einem . erwartet man an der Stelle ein einzelnes Zeichen oder gar keins.
Mit .* maskiert man eine unbestimmte Anzahl Zeichen bis zum Feldende; * allein reicht nicht. 

Beispiele

RegEx son.et
findet:

sonett, aber auch sonnet    (deutsche bzw. englische Schreibweise)
RegEx  fußball.Verein
findet:

Fußball-Verein, aber auch Fußballverein.
RegEx  Fussball.*verein  
findet: Fußballverein, Fussball-Verein, aber auch Fuß- und Handballvereine.
Und   köln.*karneval  findet auch Kölnischer Kinderkarnevalsverein

Maskierung findet daher auch ein Vorkommen von Zeichenfolgen in bestimmten Datenfeldern.
Damit kann man insbes. Zeichenfolgen finden in Feldern, die nicht indexiert sind.

Beispiele

RegEx  #20.*Fußball  oder auch   #20.*Fussball  ...  (Datenformat a.cfg)
findet:

Sätze, in denen die Zeichenfolge fußball im Feld #20 auftritt.
RegEx  #52.*donizetti
findet:

 Datensätze, in denen Donizetti im Feld  #52  steht (= Komponist in a.cfg)
RegEx  #260.*b.*univers : 
findet:

In #260b kommt Univers.. vor  (#260▼b = Verlag im Datenformat  u.cfg=MARC)
RegEx  #4.*lambert
findet: Sätze mit Lambert (Vor- oder Nachname) in einem der Felder der Gruppe #4


3. LOGISCHE KOMBINATIONEN (UND, NICHT, ODER)

Die Operatoren + (UND),  / (ODER), und  - (NICHT) stehen zwischen zwei oder mehr Zeichenfolgen, jeweils mit einem Leerzeichen links und rechts. Die Zeichenfolgen werden im gesamten Datensatz gesucht, sie brauchen nicht alle im selben Feld zu stehen. Auch ihre Reihenfolge innerhalb des Satzes ist unwichtig. Die Operationen werden von links nach rechts abgearbeitet.

Beispiele

UND
RegEx 

münchen + oktober   
oder   Oktober + München     (groß - klein und Reihenfolge egal!)
findet: Sätze in denen die Zeichenfolgen Oktober und München vorkommen, egal wo und in welcher Reihenfolge im Satz. "Oktoberfest" wird gefunden, klar, nicht aber "Münchner Oktoberfest"   (Tip:  münch eingeben)

NICHT
RegEx 

shakespeare - #20.*drama
findet:

Sätze mit Shakespeare aber ohne Drama  im Titel (Feld #20)
ODER
RegEx 

#3
.*umwelt / #3.*environment
findet: Sätze mit Umwelt oder Environment irgendwo in den Feldern der Gruppe #3

Außerdem gibt es noch die
Entweder-Oder-Suche: Der Sonder-Operator % erkennt, ob in einem Satz nur eine von den zwei angegebenen Zeichenfolgen vorkommt, aber nicht beide. Damit findet man Sätze, die nur eine von zwei verschiedenen Angaben enthalten. So kann man auch gewisse Fehler aufspüren: Wenn etwa eine Regel verlangt, dass immer beide Angaben vorkommen sollen, kann man die Sätze finden, für die das nicht zutrifft.

Beispiele

RegEx  #74 % #75
findet:

Sätze, in denen ein Verlag oder ein Ort angegeben ist, aber nicht beide (obwohl das notwendig wäre).
RegEx  #123.*▼x  %  #456
findet: Sätze mit Unterfeld ▼x in #123  oder  mit Feld #456, aber nicht beide zugleich.


4. NUMERISCHE SUCHE mit "GRÖßER ALS"  oder  "KLEINER ALS" 

Im angegebenen Feld soll irgendwo eine Zahl vorkommen, die größer bzw. kleiner ist als die dahinter angegebene Zahl. Keine Leerzeichen vor und hinter  >  und  < .

Examples

RegEx #99n>20200229
findet:

Erfassungsdatum im Feld #99n  soll später sein als 29.02.2020
RegEx #77<25
findet: Seitenzahl in #77 ist kleiner als 25.

Auch Maskierung mit Punkten ist möglich:

Beispiele

RegEx #3..>999
findet:

in einem Feld der Gruppe #3 kommt eine Zahl >999 vor
RegEx #70.*c<1500
findet: In einem Feld der Gruppe #70 (MARC) gibt es ein Unterfeld $c, in dem eine Zahl <1500 vorkommt.

Boole-Verknüpfungen gehen ebenfalls:

Beispiele

RegEx #76>1599 + #76<1700
findet: alle Sätze mit Erscheinungsjahr im 17. Jh. (#76 ist Ersch.Jahr in a.cfg)


5. NUMERISCHE GLEICHHEIT

Sätze finden, die in einem bestimmten Feld eine bestimmte Zahl enthalten.
Dazu dient der Operator '='  , aber ohne Leerzeichen links und rechts

Example

RegEx #76=1648 
findet: Veröffentlichungen, die im Jahr 1648 erschienen sind


6. NEGATIVES SUCHEN

Mit einem  Minuszeichen vor dem RegEx (ohne Leerzeichen) findet man Sätze, in denen der RegEx nicht vorkommt

Beispiel

RegEx -#99n
findet:

Sätze, in denen das Erfassungsdatum #99n fehlt (a.cfg)
RegEx -#37.*ger     (#37 = Sprachcode in a.cfg)
findet: alle fremdsprachigen Titel (in #37 kommt nicht der Sprachcode ger vor)

Anwendbar ist dies auch in Boole-Kombinationen:

Beispiel

RegEx drama + -#40.goethe + -#40.schiller
findet drama soll vorkommen, aber als Verfasser weder Goethe noch Schiller
Hier ergäbe ich aber dasselbe mit  drama - #40.goethe - #40.schiller


* Mehr zum Thema RegEx:  WikiPedia 
2020-05-12  B.Eversberg