我有以下字符串:
$_='364*84252';
问题是:如何用其他东西替换字符串中的*
?我尝试了s/\*/$i/
,但有一个错误:Quantifier follows nothing in regex
。另一方面,s/'*'/$i/
不会导致任何错误,但它似乎也没有任何影响。
答案 0 :(得分:8)
这里有些奇怪......
~> cat test.pl
$a = "234*343";
$i = "FOO";
$a =~ s/\*/$i/;
print $a;
~> perl test.pl
234FOO343
找到了一些东西:
~> cat test.pl
$a = "234*343";
$i = "*4";
$a =~ m/$i/;
print $a;
~> perl test.pl
Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE 4/ at test.pl line 4.
解决方案,使用\Q
和\E
从变量中转义特殊字符,例如(TIMTOWTDI)
~> cat test.pl
$a = "234*343";
$i = "*4";
$a =~ m/\Q$i\E/;
print $a;
~> perl test.pl
234*343
答案 1 :(得分:2)
$ perl -le '$_="364*84252";s/\*/xx/;print'
364xx84252
绝对有效。也许你在oneline而不是单引号中使用双引号?我不确定 - 我根本无法重现你的结果。您需要为问题提供更多背景知识,最好使用我们可以运行的代码来重现您的结果。
答案 2 :(得分:2)
那一定是个问题。使用perl xx.pl运行脚本不会引发任何错误。谢谢你的帮助;)
字符串自己逃避反斜杠。在这种情况下,您应该将反斜杠加倍到s/\\*/$i/
答案 3 :(得分:1)
更好地使用
$InputLine =~ s/\Q*\E//g;
这应该删除变量字符串中的任何位置的星号。
答案 4 :(得分:0)
错误必须来自$i
。 s/\*/foo/
工作正常。
答案 5 :(得分:0)
尝试
$VARIABLE =~ s/\Q*\E//;