Windows egrep不匹配正则表达式

时间:2013-07-25 16:10:09

标签: regex cmd grep

我正在尝试在安装egrep后在Windows上搜索正则表达式。

这是我想要找到的一个例子:

在下面的字符串中,我希望匹配比较单个特定字母的位置

if (lod_user.is_type == "A" || lod_user.is_type == "E" || lod_user.is_type == "S" || lod_user.is_type == "X")

因此可接受的结果是s_type == "A"s_type == "S"

这些是我尝试的查询:

"c:..\..\Program Files (x86)\GnuWin32\bin\egrep.exe" -Hn --regexp=s_type[\s-]*==[\s-]*"[CUOMPSQDEXYAZ]" FILENAME

egrep的地址,我将简称为egrep

egrep -Hn --regexp=type[\s-]*==[\s-]*"[CUOMPSQDEXYAZ]" FILENAME

egrep -Hn --regexp=[\s-]*==[\s-]*"[CUOMPSQDEXYAZ]" FILENAME

egrep -Hn --regexp=[\s-]*==[\s-]*"A" FILENAME只用一个字母进行测试

egrep -Hn --regexp=^type[\s-]*==[\s-]*"[CUOMPSQDEXYAZ]"$ FILENAME

egrep -Hn --regexp=^type$[\s-]*==[\s-]*"[CUOMPSQDEXYAZ]" FILENAME

我不打算发布我所有的尝试因为在某些时候我刚刚开始玩耍和猜测。这个正则表达式s_type[\s-]*==[\s-]*"[CUOMPSQDEXYAZ]"适用于http://gskinner.com/RegExr/所以我认为它有一些事情要做cmd和未转义字符的问题,但我尝试用^"替换引号,但仍然没有。这个正则表达式虽然有效[\s-]*==[\s-]*"."但是没有达到我想要的效果。

2 个答案:

答案 0 :(得分:1)

egrep无法理解\s,请尝试使用POSIX字符类[[:space:]]。或者,如果你真的想要允许当前有[-[:space:]]的空格或文字短划线(减号)[\s-]。 (或者您是否尝试使用Emacs字符类?)

不确定在Windows上引用规则,但传统上,我们引用整个正则表达式。

答案 1 :(得分:0)

正确的查询是:

egrep -Hn --regexp="s_type[[:space:]]*==[[:space:]]*\"[CUOMPSQDEXYAZ]\"" FILENAME

像tripleee一样,我需要使用[[:space:]]来表示正则表达式的空格。我还必须引用整个正则表达式,然后在实际的正则表达式中删除引号。