Laden...

RegEx: Problem mit negativen Lookahead

Erstellt von MysticEmpires vor 14 Jahren Letzter Beitrag vor 14 Jahren 759 Views
M
MysticEmpires Themenstarter:in
302 Beiträge seit 2004
vor 14 Jahren
RegEx: Problem mit negativen Lookahead

Guten Morgen,

ich möchte bei einer Eingabe folgendes Schema prüfen

  • Domain/Computer-Block muss min 2 Zeichen und darf maximal 63 zeichen lang sein
  • Danach darf ein Punkt folgen, muss aber nicht (falls nur ein Computername eingegeben wird)
  • Der Domain/Computerblock muss mindest 1x vorkommen und darf dies nur 4 mal

Das ist mein Pattern dazu :

^(([a-zA-Z0-9\-]+){2,63}[\.]{0,1}){1,4}

Funktioniert soweit ganz gut

computername.domain.domain.domain=> Match
computername.domain.domain.domain.domain=> nicht gültig
computername=> Gültig

Nur jetzt mein Problem :

computername.domain.domain.domain. => Match
computername. => Match

und das darf nicht sein. Daher wollte ich einene negativen Lookahead einbauen der abfängt das ein Punkt am Ende sein darf sprich sowas :

^((?!\.)(([a-zA-Z0-9\-]+){2,63}[\.]{0,1}){1,4})

Aber das funktionier logischerweise auch nicht durch die Abfrage für den optinalen Punkt. Ich denke ich muss den Aufbau überdenken. Jedoch komme ich einfach nicht drauf. Habt ihr evtl. eine Idee?

Gruß

Alex

916 Beiträge seit 2008
vor 14 Jahren

Du must den Lookahead HINTEN einbauen, heißt dann negativer Look Behind.

(?<!pattern)

Again what learned...

M
MysticEmpires Themenstarter:in
302 Beiträge seit 2004
vor 14 Jahren

Ok das war das was ich gesucht habe :

        private void textBox_Input_TextChanged(object sender, EventArgs e)
        {
            Match inputMatch = Regex.Match((sender as TextBox).Text.Trim(), @"^((([a-zA-Z0-9\-]+){2,63}[\.]{0,1}){1,4})(?<!\.)", RegexOptions.Singleline);

            if (inputMatch.Success && (inputMatch.Value == (sender as TextBox).Text.Trim()))
            {
                (sender as TextBox).ForeColor = Color.Green;
            }
            else
            {
                (sender as TextBox).ForeColor = Color.Red;
            }
        }

Dann hab ich noch ne allgemeine Frage was RegEx angeht. Er hat in dem String :

Der komplette String (Computername.test.test.test.) ist jetzt nicht "Match" aber "Computername.test.test.test". Daher muss ich jetzt expliziert abfragen ob das Value gleich dem Inputstring ist.

Kann das irgend wie umgehen?

Gruß

Aelx

916 Beiträge seit 2008
vor 14 Jahren

Kannst du die Frage noch mal so formulieren das ich sie auch verstehe 😃 ?

Again what learned...

M
MysticEmpires Themenstarter:in
302 Beiträge seit 2004
vor 14 Jahren

hihi

Manachmal ist etwas Code evtl. besser zum erklären mich stört das hier in meiner IF-Abfrage :

(inputMatch.Value == (sender as  TextBox).Text.Trim())

Sprich mein Match liefert Success obwohl der KOMPLETTE String nicht gematcht werden kann. Aber ein Teil. Daher muss ich diesen Block in die IF mit einbauen.

und ich würde nun gerne wissen ob es evtl. durch eine RegEx-Option oder ähnliches möglich wäre Abzufragen das der ganze String richtig ist.

Ich hoffe das war verständlicher läßt sich blöd in Worte fassen

Gruß

Alex

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo MysticEmpires,

ich würde nun gerne wissen ob es evtl. durch eine RegEx-Option oder ähnliches möglich wäre Abzufragen das der ganze String richtig ist.

verwende ^ und $, wenn der Pattern auf den gesamten Input-String passen soll.

Dann hab ich noch ne allgemeine Frage was RegEx angeht.

Und beachte in Zukunft bitte [Hinweis] Wie poste ich richtig? Punkt 1..2.

herbivore