Findstr:带有变量的正则表达式

约翰·杜

我有一个文本文件,其格式如下:

(1992){0103644}[00004]
(1999){0137523}[00019]
(1991){0103064}[00098]
(2001){0246578}[00103]
(2011){1399103}[00150]

我正在尝试在此文本中查找变量(由用户输入)。{}必须在之间搜索变量

setlocal EnableDelayedExpansion
set "SIRA=1"
set "TEST=103"
for /f "tokens=1-3 delims=(){}[]" %%a in ('findstr /irc:"\{[0-9]*!TEST![0-9]*\}" %MURL%') do (
  set FISIM[!SIRA!]=%%a
  set FYIL[!SIRA!]=%%b
  set FIDD[!SIRA!]=%%c
  set /a SIRA+=1
)
set /a SIRA-=1
for /l %%i in (1,1,!SIRA!) do call :_Yazdir "%%i" "!FISIM[%%i]!" "!FYIL[%%i]!" "!FIDD[%%i]!" "!SATIRRENGI!"
goto :EOF

它只有在我将变量写在findstr中时才起作用(在这种情况下,它!TEST!由代替103)。那么有没有可能找到它的方法呢?

PS:%MURL%包含文本文件的名称。

PS:: _Yazdir是我用于打印的功能

zx81

如果您可以使用支持环视的正则表达式引擎,则可以使用此正则表达式:

(?<={)[^}]+(?=})

观看演示

例如,grep在Perl模式下,您可以执行以下操作:

grep -P "(?<={)[^}]+(?=})" myfile

在注释中,您说您使用的是Windows,因此可以使用pcregrep(它是发行版的一部分PCRE)。

解释

  • (?<={)回顾后发断言,什么是先于一{
  • [^}]+ 匹配一个或多个不是 }
  • (?=})预测先行断言,接下来就是}

参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章