Замените звездочку (*) с помощью регулярного выражения Perl - PullRequest
0 голосов
/ 10 октября 2008

У меня есть следующая строка:

$_='364*84252';

Вопрос: как заменить * в строке чем-то другим? Я пробовал s/\*/$i/, но есть ошибка: Quantifier follows nothing in regex. С другой стороны, s/'*'/$i/ не вызывает никаких ошибок, но, похоже, вообще не оказывает никакого влияния.

Ответы [ 6 ]

8 голосов
/ 10 октября 2008

Что-то еще странное здесь ...

~> 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
2 голосов
/ 10 октября 2008

Это должно быть проблемой psh. Запуск скрипта с помощью perl xx.pl не выдает никаких ошибок. Спасибо за помощь;)

Строки самостоятельно экранируют обратную косую черту. В этом случае вам, вероятно, следует удвоить обратную косую черту до s/\\*/$i/

2 голосов
/ 10 октября 2008
$ perl -le '$_="364*84252";s/\*/xx/;print'
364xx84252

Определенно работает. Возможно, вы используете двойные кавычки в oneline вместо одинарных кавычек? Я не уверен - я не могу воспроизвести ваши результаты вообще. Вам нужно будет немного больше рассказать о своей проблеме, желательно с кодом, который мы можем запустить для воспроизведения ваших результатов.

1 голос
/ 02 декабря 2010

Еще лучше использовать

$InputLine =~ s/\Q*\E//g; 

Это должно убрать звездочки в любом месте строки переменной.

0 голосов
/ 02 декабря 2010

попробуй

$VARIABLE =~ s/\Q*\E//;
0 голосов
/ 10 октября 2008

Ошибка должна исходить от $i. s/\*/foo/ отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...