批量正規表示式

批量正規表示式

我在 powershell 中有以下程式碼:

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

由於我可以批量執行相同的檢查,因此我嘗試了以下操作,但沒有任何結果:

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

if %url% == 0 (

echo la variables es correcta

) else (

echo la varaible no es correcta

)

答案1

我會用條件執行:

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

因為:

  • 您正在檢查錯誤的變數 ( if %url% == 0),您應該使用if %ErrorLevel% == 0or if %ErrorLevel% equ 0,甚至(對於小於零的值if not ErrorLevel 1也是如此,但無論如何都不會傳回這樣的值);一個不錯的選擇是ErrorLevelfindstr條件執行;
  • echo %url%%url%當包含特殊字元時會出現問題,因此延遲擴張用於避免這種情況,透過啟用cmd /V並透過!url!代替%url%;應用
  • echo可能會對 的某些值產生問題!url!,可以透過編寫 來避免echo(!url!space管道符號 ( ) 前面的尾隨|也會被回顯,因此只需將其刪除即可;
  • URL 通常不區分大小寫,因此搜尋/比較時也不區分大小寫,使用findstr /I;
  • URL 中的the.應該是一個文字字符,因此在搜尋字串中對其進行轉義,例如\.;
  • 你使用的後綴*$是錯誤的,它應該是.*$,但無論如何都不需要;我會附加一個文字點(\.),但不匹配類似的東西https://www.youtubefake.net/,例如;

答案2

歡迎來到超級用戶。

如果您試圖確認某些文字以「https://www.youtube「,你最後不需要*$。而且我不確定你為什麼%url% == 0在做完之後進行比較findstr。檢查errorlevel會告訴你想要知道的。這段程式碼做了我認為你想要完成的事情。

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

)

答案3

從您的範例來看,您似乎不需要實際的正規表示式。您可以使用簡單的字串替換來判斷一個字串是否在另一個字串中。

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

語法為 %VAR_NAME:SEARCH_STRING=REPLACE_STRING%

我們在這裡所說的是:

  1. 代替 ”https://www.youtube" 變數中沒有任何內容網址
  2. 將其與未完成替換的版本進行比較。
  3. 如果它們相同,則字串“https://www.youtube" 不在變數中。

注意事項:

此方法不提供「^」錨點在 powershell 中提供的功能。如果變數包含https://www.youtube「在任何地方,你的配對都會無效..例如..https://www.senorsuerte.com/value?https://www.youtube當這不是你打算做的時候,就會產生影響。

透過在我們正在測試的每個字串的開頭添加一個無效的字符,這種情況也很容易修復。

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

請注意每個字串開頭的“*”。 「*」並不神奇。

相關內容