![批处理中的正则表达式](https://linux22.com/image/1595415/%E6%89%B9%E5%A4%84%E7%90%86%E4%B8%AD%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.png)
我在 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
欢迎来到超级用户。
如果你想确认某些文本以“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%
我们在这里要说的是:
- 代替 ”https://www.youtube“变量中没有任何内容网址
- 将其与尚未进行替换的进行比较。
- 如果它们相同,则字符串“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
)
请注意每个字符串开头的“*”。“*”不是魔法......它只是将我们的查询锚定在字符串的开头,可以是任何字符。