バッチ内の正規表現

バッチ内の正規表現

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% == 0または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 内のは.リテラル文字として意味されるため、検索文字列では\.;のようにエスケープします。
  • *$使用したサフィックスは間違っています。 と読むべきですが.*$、いずれにしても必要ありません。ただし、\.のようなものと一致しないように、リテラルドット ( )を追加しますhttps://www.youtubefake.net/。たとえば、

答え2

SuperUserへようこそ。

テキストが「https://www.youtube" の場合、最後に は必要ありません。 また、を実行した後に*$比較する理由がよくわかりません。 をチェックすると、知りたいことがわかります。 このコードは、おそらくあなたが達成しようとしていることを実行します。%url% == 0findstrerrorlevel

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"という名前の変数に何も入っていないURL
  2. 置換が行われていないものと比較します。
  3. 同じ場合、文字列「https://www.youtube「」は変数にありませんでした。

注意:

このメソッドは、PowerShellの「^」アンカーが果たしていた機能を提供しません。変数含むhttps://www.youtube" がどこにも存在しない場合、一致は無効になります。たとえば...https://www.senorsuete.com/value?https://www.youtube意図していないときにヒットを生み出すことになります。

この場合も、テストする各文字列の先頭に無効な文字を追加することで簡単に修正できます。

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

各文字列の先頭にある「*」に注意してください。「*」は魔法ではありません。文字列の先頭にクエリを固定するだけであり、任意の文字にすることができます。

関連情報