【问题标题】:Removed .* from regex broke regex从正则表达式中删除 .* 破坏了正则表达式
【发布时间】:2013-03-21 22:02:15
【问题描述】:

我有以下代码,它确实包含 .* 但我删除了它们。 这是我更改的行:

>>%vbs% echo regex.pattern="\nName=%~1\n"

这曾经是:

>>%vbs% echo regex.pattern="\nName=.*%~1.*\n"

但它也在搜索变量之前或之后的单词时的行。我只希望它搜索 Name=(variable) 的完全匹配。变量是 var6。

我想要解决这个问题的原因是,当它在“Name=”之后搜索 var6 时,我希望删除通配符。因为我只想找到并更改“Name=var6”,而不是“Name=(sometext)var6(sometext)”。

上面的第一行不起作用,上面的第二行在变量之前和之后搜索通配符,所以这不是我想要的。我在上面的第一行做错了什么?

这是扩展代码(有问题的行在中间):

SETLOCAL ENABLEDELAYEDEXPANSION
find "!var6!" < "Campaign_SCR2.mis.tmp" >nul && (
call :replace "!var6!"
call :stripdup "Campaign_SCR2.mis.tmp.tmp2" "Campaign_SCR2.mis.tmp" "(Class=.*\nType=.*\nOrigin=.*\nS    ide=.*)\nClass=.*\nType=.*\nOrigin=.*\nSide=.*" "$1"
del "Campaign_SCR2.mis.tmp.tmp2"
)
)
)
goto Loop
goto :EOF

:replace
set vbs="%temp%\%random%.vbs"
if exist %vbs% goto :replace

>%vbs% echo set regex=new regexp
>>%vbs% echo regex.global=true
>>%vbs% echo regEx.IgnoreCase=False
>>%vbs% echo regex.pattern="\nName=%~1\n"
>>%vbs% echo wscript.stdOut.write regex.replace    (wscript.stdin.readall,"Name=ShipDummy"+vbCRLF+"Class=ShipDummy"+vbCRLF+"Type=0"+vbCRLF+"Origin=Environmental"+vbCRLF+"Side=0"+vbCRLF)
cscript /nologo %vbs% <"Campaign_SCR2.mis.tmp" >"Campaign_SCR2.mis.tmp.tmp2"
del %vbs%
goto :EOF


:stripdup
set vbs="%temp%\%random%.vbs"
if exist %vbs% goto :stripdup


 >%vbs% echo set regex=new regexp
>>%vbs% echo regex.global=true
>>%vbs% echo regEx.IgnoreCase=False
>>%vbs% echo regex.pattern="%~3"
>>%vbs% echo wscript.stdOut.write regex.replace(wscript.stdin.readall,"%~4")
cscript /nologo %vbs% <"%~1" >"%~2"
del %vbs%
goto :EOF



:exitloop4
:Loop

我尝试了 var6 的不同值(在正则表达式中为 %~1)。我试过带空格和不带空格的值,但没有运气。

【问题讨论】:

  • 您应该希望从 VBScript 中删除批处理。说真的,你为什么要这样对自己?构建一个 VBScript 来完成实际工作并使所有内容完全不可读几乎是您的批处理代码所做的所有事情,因此您也可以使用普通的 VBScript 来执行此操作。
  • 这不能回答问题。
  • 这就是为什么我把它作为评论,而不是答案。当然,您可以随意将自己的生活复杂化。

标签: regex vbscript batch-file cmd


【解决方案1】:

怎么样(我只是猜这是你想要的)

>>%vbs% echo regex.pattern="[\w]*Name=[\w]*%~1[\w]*"

这将匹配

(Any whitespace)Name=(Any Whitespace)var6(Any Whitespace)

或者

>>%vbs% echo regex.pattern=".*[\w]*Name=[\w]*%~1[\w]*.*"

这将匹配

(Anything)(Any whitespace)Name=(Any Whitespace)var6(Any Whitespace)(Anything)

注意:顺便说一句,我在您的脚本中没有看到设置var6 的任何地方!如果它从未设置,那么它将始终是一个空白字符串。

【讨论】:

  • 嗨,是的 var6 设置在这个脚本之上。
猜你喜欢
  • 2016-08-31
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2016-08-17
  • 2021-07-16
  • 2013-04-12
相关资源
最近更新 更多