使用Perl正则表达式替换星号(*)

时间:2008-10-09 22:17:45

标签: regex perl

我有以下字符串:

$_='364*84252';

问题是:如何用其他东西替换字符串中的*?我尝试了s/\*/$i/,但有一个错误:Quantifier follows nothing in regex。另一方面,s/'*'/$i/不会导致任何错误,但它似乎也没有任何影响。

6 个答案:

答案 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)

错误必须来自$is/\*/foo/工作正常。

答案 5 :(得分:0)

尝试

$VARIABLE =~ s/\Q*\E//;