尝试用“/”替换“////”不起作用

时间:2013-06-24 10:24:46

标签: string perl replace

我需要用“/".

替换所有出现的”////“

我有以下代码,但它不起作用:

$res =~ s/\/\/\/\//\//g;

我做错了什么?

2 个答案:

答案 0 :(得分:9)

许多初学者没有意识到的一件事是你不必使用斜杠作为正则表达式分隔符。在您的情况下,简单地切换到另一个角色更容易。这避免了所谓的丘陵和山谷影响:

因此,而不是:

$res =~ s/\/\/\/\//\//g;

你可以这样做:

$res =~ s#////#/#g;

当正则表达式中涉及斜杠时,通常使用井号(也称为锐符号,数字符号或八角星),因为井号在正则表达式语法中没有任何特殊含义,并且通常在语法中看不到。但是,您几乎可以使用任何您想要的东西。在这种特殊情况下,圆括号也很好,因为它们不在正则表达式中,可能更容易阅读:

$res =~ s(////)(/)g;

请注意您如何匹配括号。即(标志着开头,)标志着结束。方括号([...])和花括号('{{}})也是如此。请记住选择正则表达式中尚未包含的内容。

顺便说一下,你的例子中的正则表达式适合我。也许您在程序中正确错误地输入了它?您的程序编辑器是否使用语法突出显示?

你得到的错误是什么?你说它不起作用。你的意思是它没有编译,或者它没有改变你认为它应该改变的东西?您是否尝试编写示例程序以查看它是否在简化的情况下工作?您的计划中有use warningsuse strict吗?这些可以帮助您找到可能输入错误的地方。

答案 1 :(得分:2)

您可以使用\K(保留)转义序列和特定量词{3}来简化您的替换。当然,使用s///的另一个分隔符来避免“倾斜牙签综合征”。

$res =~ s#/\K/{3}##g;