Ich habe den folgenden regulären Ausdruck für die Verwendung in einem Suchfeld entwickelt.
Das Ziel ist es, die Nutzung von bis zu 2 Worte übereinstimmen, dann das ganze Wort mit dem Buchstaben (n) und allem nach:Regex, um bis zu 2 vollständige Wörter und das nächste Wort mit dem Zeichen
/^
.*? # match anything before, as few times as possible
(
(?:
[^\s]+\s* # anything followed by whitespace
){1,2} # match once or twice
\s*? # match whitespaces that may be left behind, just in case
[^\s]*? # match the beginning of the word, if exists
)?
(foo|bar) # search term(s)
([^\s]*\s*.*) # whatever is after, with whitespace, if it is the end of the word
$/xi
Das Problem ist, dass es nicht immer richtig passen.
Einige Beispiele, wenn für "a" gesucht:
Fantastic drinks and amazing cakes
Expected match:
$1 = F
$2 = a
$3 = ntastic drinks and amazing cakes
Result:
$1 = Fantastic drinks (space)
$2 = a
$3 = nd amazing cakes
-----------------------------------------
Drinks and party!
Expected match:
$1 = Drinks (space)
$2 = a
$3 = nd party!
Result:
$1 = Drinks and p
$2 = a
$3 = rty!
------------------------------------------
Drinks will be served at the caffetary in 5 minutes
Expected match:
$1 = be served (space)
$2 = a
$3 = t the caffetary in 5 minutes
Result (matches correctly):
$1 = be served (space)
$2 = a
$3 = t the caffetary in 5 minutes
Sie mit ihm auf https://regex101.com/r/cI7gZ3/1 experimentieren mit Unit-Tests enthalten.
Die Art, dass dies nicht funktioniert, ist seltsam, beyound was ich beschreiben kann. Aber, meine Vermutung, ist, dass dies Übereinstimmungen vorzieht, die 1-2 Wörter haben vor der Suchbegriff.
Was denken Sie, dass das hier falsch sein könnte? Was denkst du, was diese Probleme verursacht?
Was ist 'Ffffantastic'? Wie sollten Teile erfasst werden? – revo
Wenn in der zweiten Erfassungsgruppe (ich bezeichne 'Suchbegriff') das in meinen Beispielen verwendete "a" ist, sollte 'Ffff' in der ersten Gruppe und' ntastic' auf der 3. Gruppe gespeichert werden. –
Ich sehe, Sie haben die Antwort akzeptiert, aber eine Frage: haben Sie nur Buchstaben und Leerzeichen oder andere Zeichen können auch in Ihrem Eingabe-String sein? – revo