2011-10-28 59 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