NSPredicate mit einer Zeichenfolge, die den Wortanfang abgleicht

8

Dies muss ein Duplikat sein. Aber bei so vielen NSPredicate-Fragen kann ich nicht die richtige finden.

Ich habe eine Liste von Core Data-Objekten, die ein compositeName -Feld enthalten. Ein Name wie "Emily Blunt" könnte da drin sein. Ich möchte die Liste mit einem NSPredicate durchsuchen, das mich nach "Em", aber auch nach "Bl" durchsuchen lässt und dann diesen Namen in den abgerufenen Ergebnissen anzeigt.

Das muss super einfach sein, aber wie du denkst, sehe ich es nicht. Mein dysfunktionaler Versuch eines NSPredicates mit einem regulären Ausdruck sieht so aus:

%Vor%

Mein Gedanke für diesen regelmäßigen Ausdruck war:

  • eine beliebige Anzahl von Zeichen vor
  • negative Lookbehind-Leerzeichen oder Anfang
  • die Abfrage
  • beliebig viele Zeichen nach

Aber es funktioniert nicht. Ich bekomme keine Ergebnisse. Wie behebe ich das?

P.S. Wenn es eine NSPredicate-Lösung ohne reguläre Ausdrücke gibt, die auch meinem Zweck entspricht.

    
epologee 17.06.2012, 12:58
quelle

1 Antwort

16

Sie müssen die gesamte Regex-Musterzeichenfolge außerhalb der Prädikatzeichenfolge erstellen und dann an das Prädikat übergeben.

Außerdem gibt es ein Regex-Konstrukt \b , um mit einer Wortgrenze übereinzustimmen, was Sie anstreben.

Alles in allem sollte dies eine einfache Lösung für Ihr Problem sein:

%Vor%

Wenn der eingegebene Suchtext nicht bereinigt wurde, sollten Sie dies tun, bevor Sie ihn an die Regex-Engine übergeben.

Eine weitere Verbesserung könnte darin bestehen, Unicode-Zeichen an der Wortgrenze zu akzeptieren, um es Leuten zu ermöglichen, nach 'Ántonio', 'Über' und anderen ähnlichen Strings zu suchen.

Die folgenden Codezeilen erzeugen ein Regex-Muster, das beide Aspekte berücksichtigt:

%Vor%     
Monolo 17.06.2012, 15:29
quelle