Regulärer Ausdruck im Batch

Regulärer Ausdruck im Batch

Ich habe den folgenden Code in Powershell:

if($url -match "^https://www.youtube")

Da ich dieselbe Prüfung im Stapel durchführen kann, habe ich Folgendes versucht, aber nichts:

echo %url% | findstr "^https://www.youtube*$" >nul

if %url% == 0 (

echo la variables es correcta

) else (

echo la varaible no es correcta

)

Antwort1

Ich würde es machen mitBedingte Ausführung:

cmd /V /C echo(!url!| findstr /I "^https://www\.youtube.\" > nul && (
    echo la variable es correcta
) || (
    echo la variable no es correcta
)

Weil:

  • Sie überprüfen die falsche Variable ( if %url% == 0), Sie sollten if %ErrorLevel% == 0oder if %ErrorLevel% equ 0oder sogar verwenden if not ErrorLevel 1(was auch für ErrorLevelWerte kleiner als Null gilt, aber findstrtrotzdem keine solchen zurückgibt); eine nette Alternative istBedingte Ausführung;
  • echo %url%wird problematisch, wenn %url%Sonderzeichen enthalten sind, daherverzögerte Expansionwird verwendet, um dies zu verhindern, aktiviert durchcmd /Vund angewendet durch !url!anstelle von %url%;
  • echokönnte bei bestimmten Werten Probleme haben !url!, die durch das Schreiben von vermieden werden können echo(!url!; außerdem würde ein nachgestelltes Zeichen spacevor dem Pipe-Symbol ( ) wiederholt, entfernen Sie es daher einfach;|
  • Bei URLs wird normalerweise nicht zwischen Groß- und Kleinschreibung unterschieden. Führen Sie daher auch bei der Suche/Vergleichung keine Unterscheidung zwischen Groß- und Kleinschreibung durch, indem Siefindstr /I;
  • Das .in der URL ist als wörtliches Zeichen gedacht, maskieren Sie es daher in der Suchzeichenfolge wie folgt \.: ;
  • das *$von Ihnen verwendete Suffix ist falsch. Es sollte lauten .*$, ist aber sowieso nicht erforderlich. Ich würde jedoch einen wörtlichen Punkt () anhängen, um beispielsweise \.nicht mit etwas wie übereinzustimmen .https://www.youtubefake.net/

Antwort2

Willkommen bei SuperUser.

Wenn Sie versuchen zu bestätigen, dass ein Text mit " beginnthttps://www.youtube*$", Sie brauchen das am Ende nicht . Und ich bin mir nicht sicher, warum Sie %url% == 0nach dem Vergleichen das tun findstr. Wenn Sie das überprüfen, errorlevelerfahren Sie, was Sie wissen möchten. Dieser Code tut, was Sie meiner Meinung nach erreichen möchten.

SET /p url=Enter a URL:

echo %url% | findstr "^https://www.youtube" >nul

if errorlevel 1 (

echo la varaible no es correcta

) else (

echo la variables es correcta

)

Antwort3

Aus Ihrem Beispiel geht nicht hervor, dass Sie einen tatsächlichen regulären Ausdruck benötigen. Sie können eine einfache Zeichenfolgensubstitution verwenden, um festzustellen, ob eine Zeichenfolge in einer anderen Zeichenfolge enthalten ist.

if "%url:https://www.youtube=%"=="%url%" ( 
    echo variable is not in string 
) else ( 
    echo variable is in string 
)

Die Syntax lautet %VAR_NAME:SEARCH_STRING=REPLACE_STRING%

Was wir hier sagen:

  1. Ersatz "https://www.youtube" ohne Inhalt in der Variable mit dem NamenURL (URL)
  2. Vergleichen Sie es mit einem, bei dem der Austausch nicht durchgeführt wurde.
  3. Wenn sie gleich sind, wird die Zeichenfolge „https://www.youtube" war nicht in der Variable.

Vorbehalte:

Diese Methode bietet nicht die Funktionalität, die der "^"-Anker in Powershell bot. Wenn die Variableenthält"https://www.youtube" überall, Ihre Übereinstimmung wird ungültig sein... zum Beispiel..."https://www.senorsuerte.com/value?https://www.youtube"einen Treffer produzieren würde, obwohl das nicht Ihre Absicht ist.

Dieser Fall lässt sich auch leicht beheben, indem man dem Anfang jeder der zu testenden Zeichenfolgen ein ungültiges Zeichen voranstellt.

if "*%url:https://www.youtube=%"=="*%url%" ( 
    echo variable is not in string 
) else ( 
    echo variable is in string 
)

Beachten Sie das „*“ am Anfang jeder Zeichenfolge. Das „*“ ist keine Zauberei. Es verankert unsere Abfrage lediglich am Anfang der Zeichenfolge und kann JEDES Zeichen sein.

verwandte Informationen