2017-02-11 5 views
0
ausgeschlossen

Ich habe die folgende Regex:Warum? in Wortgrenze in regex wird immer

\b[_\.][0-9]{1,}[a-zA-Z]{0,}[_]{0,}\b 

Meine Eingabezeichenfolge ist:

  1. _49791626567342fYbYzeRESzHsQUgwjimkIfW
  2. .49791626567342fYbYzeRESzHsQUgwjimkIfW

ich, dass es annehmen würde, passt 1. und 2., aber es ist nur in der ersten Szene passend Ario. Kannst du mir helfen, den Fehler in der Regex zu finden?

+0

ändern Sie die Regex-Schriftart in die normale Form. –

+1

Es gibt keine Wortgrenze vor dem '.'. Warum sollte es sein? Es gibt kein Wort davor oder danach. – Biffen

+0

Problem ist um [_ \.] Only..dont why – harsh

Antwort

3

Eine Wortgrenze ist eine Grenze zwischen einem Wortzeichen (Buchstaben, Ziffern, Unterstrich) und einem Nicht-Wort-Zeichen oder dem Anfang oder Ende der Zeichenfolge. Also gibt es einfach keine Wortgrenze zwischen Punkt (Nicht-Wort-Zeichen) und dem Anfang der Zeichenfolge.

Sie einen Anker in diesem Fall verwenden können, den Anfang des Strings zu signalisieren, wie

^[_\.][0-9]{1,}[a-zA-Z]{0,}[_]{0,}$ 

können Sie auch durch Ihre regex ein wenig verkürzen mit * und + quantifiers und unnötige Escape-Sequenzen zu vermeiden, wie von Toto vorgeschlagen

^[_.][0-9]+[a-zA-Z]*_*$ 

Sie auch Look-Ahead und Lookbehind (falls vorhanden) können Sie sich eine individuelle Grenze zu bauen.

+0

danke es funktionierte – harsh

+2

Das kann reduziert werden zu: '^ [_.] [0-9] + [a-zA-Z] * _ *' – Toto

+0

@Toto ja, kann es (in meiner Antwort enthalten), aber es macht keinen funktionalen Unterschied, also habe ich mich nicht wirklich darauf konzentriert. (Auch was für Sie reduziert ist, könnte für jemand anderen weniger lesbar sein) –

Verwandte Themen