String 试图取代////&引用;加上/&引用;它不起作用了
我需要将所有出现的“///”替换为“/” 我有以下代码,但它不起作用:String 试图取代////&引用;加上/&引用;它不起作用了,string,perl,replace,String,Perl,Replace,我需要将所有出现的“///”替换为“/” 我有以下代码,但它不起作用: $res =~ s/\/\/\/\//\//g; 我做错了什么?您可以使用\K(keep)转义序列和特定的量词{3}来简化替换。当然,对s//使用另一个分隔符可以避免“倾斜牙签综合症” 许多初学者没有意识到的一点是,不必使用斜杠作为正则表达式分隔符。在您的情况下,切换到另一个角色更容易。这避免了所谓的丘陵和山谷影响: 因此,与此相反: $res =~ s/\/\/\/\//\//g; 您可以这样做: $res =~ s#
$res =~ s/\/\/\/\//\//g;
我做错了什么?您可以使用
\K
(keep)转义序列和特定的量词{3}
来简化替换。当然,对s//
使用另一个分隔符可以避免“倾斜牙签综合症”
许多初学者没有意识到的一点是,不必使用斜杠作为正则表达式分隔符。在您的情况下,切换到另一个角色更容易。这避免了所谓的丘陵和山谷影响: 因此,与此相反:
$res =~ s/\/\/\/\//\//g;
您可以这样做:
$res =~ s#////#/#g;
磅符号(也称为锐器、数字符号或八进制符号)通常在正则表达式中包含斜杠时使用,因为磅符号在正则表达式语法中没有任何特殊含义,通常在语法中看不到。然而,你几乎可以使用任何你想要的东西。在这种情况下,括号也很好,因为它们不在正则表达式中,可能更容易阅读:
$res =~ s(////)(/)g;
注意如何匹配括号。也就是说,(
标记开始,)
标记结束。方括号([…]
)和大括号(“{…}”)也是如此。请记住选择正则表达式中尚未包含的内容
顺便说一句,你例子中的正则表达式对我很有用。也许你在程序中输入的是正确的还是错误的?您的程序编辑器是否使用语法高亮显示
你的错误是什么?你说它不起作用。你是说它不编译,还是说它不改变你认为它应该改变的东西?您是否尝试过编写一个示例程序,看看它是否能在简化的情况下工作?您的程序中是否有
使用警告
和使用严格的
?这些可以帮助您找到可能键入错误的地方。不确定这在perl中是否可行,但可以尝试s\u///\ ug
这对我很有效,用一个斜杠替换4个斜杠。您的问题很可能存在于您未显示的其他代码中。我将其替换为$res=~s |///|/| g代码>同样,永远不要说而不描述如何。请使用类似于$res=~s |[/]{4}|/| g
。这4条斜线很难读懂。我没听说过它叫《丘陵与山谷》,我喜欢这一条。我听说过倾斜牙签,虽然是描述性的,但似乎不现实:-)
$res =~ s(////)(/)g;