Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 试图取代////&引用;加上/&引用;它不起作用了_String_Perl_Replace - Fatal编程技术网

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;