Регулярное выражение в пакете

Регулярное выражение в пакете

У меня есть следующий код в 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(что также верно для ErrorLevelзначений меньше нуля, но findstrв любом случае не возвращает их); хорошей альтернативой являетсяусловное исполнение;
  • 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% == 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" с пустым местом в переменной с именемURL-адрес
  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 
)

Обратите внимание на "*" в начале каждой строки. "*" не магия... она просто привязывает наш запрос к началу строки и может быть ЛЮБЫМ символом.

Связанный контент