Ich weiß, dass es in diesem Bereich viele Fragen gibt, aber ich habe keine gefunden, die mir helfen könnten oder eine Antwort auf mein Problem geben könnten, und als eine vollständige Regex-Neuzeit brauche ich deine Hilfe.Regex: Ist es möglich, einen Port und einen Port-Bereich mit einem Regex zu validieren?
Ich verwende diese regex Port-Nummern zu bestätigen:
^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
Aber ist es möglich, einen regulären Ausdruck zu erstellen, die sowohl portStart:portEnd
einen einzigen Port-Nummer und einen Portbereich im Format validieren?
Beispiele:
erlaubt:
6112:
:6113
6112-7777
27100(any other character than colon)28000
Die Portnummern sind, na ja ..., Zahlen. Ist es nicht einfacher, den String mit ':' oder '-' als Trennzeichen zu trennen, zu überprüfen, ob das Ergebnis genau eine oder zwei Komponenten enthält, und dann zu überprüfen, dass jede Komponente eine positive Zahl von nicht mehr als 65535 ist? Alle diese in mehreren Zeilen Code (abhängig von der Sprache, die Sie verwenden) und ohne (schwierig zu lesen und zu verstehen) regexp. – axiac
Nun, es wäre kein großes Problem, die Funktionalität dafür zu implementieren, aber ich habe mich nur gefragt, ob das überhaupt möglich ist, da es eine optimale Lösung für meine aktuelle Aufgabe wäre. – BaconPancakes
Es hängt davon ab, was du mit "optimal" meinst. Wenn Sie nach Millionen von Strings suchen müssen, ist die Regex-Lösung wahrscheinlich diejenige, die am schnellsten läuft (sicher, wenn Sie eine interpretierte Sprache verwenden). Andernfalls richten Sie sich auf die Lesbarkeit des Codes. Wenn die von Ihnen gepostete Regex funktioniert, verwenden wir 'X', um den inneren Teil zu bezeichnen (ohne die Start- und Endmarkierungen). Die gewünschte Regex ist etwas wie '^ X ([: -] X)? $'. Denken Sie daran, dass Sie auch prüfen müssen, ob der erste Port kleiner als der zweite ist, um einen gültigen Bereich zu haben, und dies ist nicht mit Regex möglich. – axiac