Donnerstag, Februar 27, 2020

Version reguläre Ausdrücke in CMake

Möchte ich validieren Sie vom Benutzer angegebene version-string, der – um sicherzustellen, dass es besteht aus drei Punkten getrennten zahlen (e.g. 1.20.300).
Ich bin mir aber nicht sicher, wie Sie Sie zu schreiben, wie regex, der code unten ist nur ein Versuch:

if( PROJECT_VERSION MATCHES "([0-9]+).([0-9]+).([0-9+])" )
    message( "NOTE: Valid version string" )
else()
    message( FATAL_ERROR "Invalid version string" )
endif()

So, wie Sie richtig schreiben erforderlich regex?

Danke.

UPD

Mein regex passt auch 1.2.3.4, aber sollte nicht!
Nur drei Punkten getrennten zahlen sind möglich.

  • versuchen "^([0-9]+)[.]([0-9]+)[.]([0-9]+)$"
  • Es passt auch 1.2.3.4 string, zum Beispiel. Aber sollte nicht!
InformationsquelleAutor eraxillan | 2015-11-02

1 Kommentar

  1. 7

    Punkte sind spezielle regex, so sollten Sie sich entfliehen Sie:

    "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$"

    Warum Doppel-backslash? Siehe hier: https://stackoverflow.com/a/4490920/4323

    • Ok, sieht aus wie es funktioniert! 🙂 Kannst du kurz erklären, warum Sie verwenden ^ und $? Auch ich kann immer noch nicht verstehen, was die regex-syntax Dialekt CMake unterstützt. E. g. es gibt keine \d (beliebige Ziffer) Betreiber hier
    • ^ und $ bedeutet „Anfang“ und „Ende“ der Schnur jeweils. Dies verhindert, dass das matching Müll wie abc1.2.3 xyz.
    • Es bekam. Dies ist der Grund, warum meine ursprüngliche reguläre Ausdruck entspricht 1.2.3**.4**. Danke!

Kostenlose Online-Tests