2013-07-25 76 views
0

我試圖在安裝egrep後在Windows上搜索正則表達式。Windows egrep不匹配正則表達式

這是什麼,我試圖找到一個例子:

在字符串下面我想匹配在以往任何時候它比較單一的特定字母

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-]*"."但沒有達到我想要的。

回答

1

egrep不明白\s,請嘗試使用POSIX字符類[[:space:]]代替。或者,如果您確實想要允許空格或文字短劃線(減號),那麼您當前的[\s-]就是[-[:space:]]。 (或者您是否嘗試使用Emacs字符類?)

不確定Windows上的引用規則,但傳統上我們會引用整個正則表達式。

+0

我不得不查看空間的正則表達式,因爲我不記得它是什麼。如果你引用整個正則表達式將引用正則表達式的內部工作,或者我將不得不逃脫它們?空格的工作,但我得到奇怪的結果,例如'if(lod_deliverable.is_type == SSDeliverableTypes.ProjectAdmin)'查詢'--regexp = s_type [[:space:]] * == [[:space:] ] *「[CUOMPSQDEXYAZ]」'關於試用整個正則表達式編輯:仍然得到相同的結果 –

0

正確的查詢是:

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

就像tripleee說我需要使用[[:空間:]代表空格的正則表達式。我還必須引用整個正則表達式,然後在實際的正則表達式中避開引號。