Findstr:带变量的正则表达式

时间:2014-06-27 19:27:48

标签: regex batch-file cmd

我有一个文本文件,它就像这样格式化了;

(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是我用于打印的功能

2 个答案:

答案 0 :(得分:1)

我发现为什么我的代码不起作用。我使用的变量名称类似于XXX[1]。所以当findstr开始正则表达式搜索时,假设[1]必须在文本文件中。傻我,我浪费时间看到这个错误:(

答案 1 :(得分:0)

如果你可以使用支持外观的正则表达式引擎,你可以使用这个正则表达式:

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

See demo

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

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

在评论中,您说您使用的是Windows,因此您可以使用pcregrep(这是PCRE发布内容的一部分)。

<强>解释

  • (?<={) lookbehind声称前面的内容是{
  • [^}]+匹配一个或多个不是}
  • 的字符
  • (?=})前瞻断言后面的内容是}

<强>参考