2011-10-28 49 views
0

我試圖尋找一個字符串,它是一個用戶所屬的UNIX組的列表,reg表達式搜索和替換錯誤

並更換組vsifax或者是它的中間或字符串組結束,前一個空值或空間較容易

$gs =~ s/*,vsifax//; 

但是當我嘗試運行腳本

$ usermove.pl > users.sh 
Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE ,vsifax/ 
at usermove.pl line 13. 

我可沒這將返回一個錯誤看看有什麼問題將我已閱讀並重新讀一遍對正則表達式和其殺死我

+2

在正則表達式中,量詞(在這種情況下爲*)跟隨它所關聯的原子。所以把一個量詞作爲正則表達式中的第一個元素總是會出錯。聽聽你如何看待錯誤信息可能會更清楚會很有趣。 –

+1

@davorg,對於使用POSIX RE的人來說,他可能不太熟悉「量詞」是什麼。我認爲一個更清晰的信息可能是「量詞前沒有模式」*'「 – Axeman

+0

@davorg - 由於我認爲」原子「應該在」量詞「之後出現,我不清楚爲什麼它重要,沒有了「量詞」 – ScottC

回答

2

試試這個,我不認爲*需要在您的正則表達式的一些教程

$gs =~ s/(,?vsifax)|(vsifax,?)//; 
+0

之前,我認爲這將是因爲有可能在'vsifax'前面沒有','的時候,並且*匹配下一個字符的零或者更多的發生......但是我會嘗試 – ScottC

+1

@ScottC由於你的量詞*在錯誤的地方。嘗試用我的替換你的正則表達式,並告訴我你得到了什麼。 – Fred

+0

好了,所以我的下一個問題是,當一切我讀到說我需要的*匹配的',' – ScottC

4

我猜這個命令應該看起來像這樣工作。

$gs =~ s/*,vsifax//; 

應該是:

$gs =~ s/,?vsifax//; 

我猜你要刪除的組名和最後一個逗號,不是嗎?

+0

之後 – ScottC