Ich würde Folgendes vorschlagen:
\.(\S*)(?=\.|$)
Wie es funktioniert:
\. # . (Dot)
( # Capture Data (foo)
\S # Any Non-Whitespace Character
* # 0 or more times
)
(?= # Lookahead (Check) for...
\. # . (Dot)
| # OR
$ # End of String
)
Die Daten, die Sie in der 1st
Capture-Gruppe gespeichert werden soll
Live Demo on Regex101
Vielleicht möchten Sie es, dies zu ändern.
(? \ S +) (? =. | $)
Gelesen @ РоманПарадеев ‚s Kommentar
Probleme mit Ihrem RegEx:
\.(.+?)(?=[\.|\Z])
- Die
\.
ist fein
.+?
macht keinen Sinn (eigentlich zu siehe @ РоманПарадеев ist commen t, du solltest es wahrscheinlich benutzen).
+
bedeutet oder mehr Zeiten, während *
bedeutet oder mehr mal. So kann ich sehen, was Sie versuchten, zu erhalten, aber es ist einfacher, einfach zu verwenden (.*)
(es sei denn, es gibt mehrere .
in der Zeichenfolge, und Sie wollen es nicht gierig sein. Wieder, beziehen Sie sich auf @ РоманПарадеев 's Kommentar)
[\.|\Z]
wird nicht funktionieren, wie Sie erwartet haben.
- Zunächst keine Notwendigkeit, die
\.
zu entkommen, nur .
verwenden. Als nächstes wird jedes Zeichen innerhalb von []
abgeglichen. Dies bedeutet, dass es mit .
, |
oder \Z
übereinstimmt. Sie verwenden |
nur innerhalb einer Gruppe, wie \.|\Z
. Schließlich können Sie $
statt \Z
- Das bedeutet, kann
(?=\.|$)
oder(?=[.\Z])
verwenden (\Z
Bedürfnisse verwendet werden hier, weil $
ein Spiele $
wahrsten Sinne des Wortes)
Sind Sie sicher, dass Sie * alle * Zeichen (einschließlich Whitespace) meinen? –