Символ пробела в регулярном выражении не распознается - PullRequest
4 голосов
/ 21 ноября 2011

Я пишу простую программу - см. Ниже мой код с комментариями.Кто-нибудь знает, почему символ пробела не распознается в строке 10?Когда я запускаю код, он находит ::, но не заменяет его пробелом.

1  #!/usr/bin/perl
2
3  # This program replaces :: with a space
4  # but ignores a single :
5
6  $string = 'this::is::a:string';
7
8  print "Current: $string\n";
9 
10 $string =~ s/::/\s/g;
11 print "New: $string\n";

Ответы [ 4 ]

16 голосов
/ 21 ноября 2011

Попробуйте s/::/ /g вместо s/::/\s/g.

На самом деле \s - это класс символов, представляющий все пробельные символы, поэтому имеет смысл иметь его только в обычныхвыражение (первая часть), а не в строке замены.

3 голосов
/ 21 ноября 2011

Замените \s реальным пробелом.

\s является сокращением для шаблона сопоставления пробелов. Он не используется при указании строки замены.

3 голосов
/ 21 ноября 2011

Заменить строку должно быть буквальное пространство, т. Е .:

$string =~ s/::/ /g;
3 голосов
/ 21 ноября 2011

Используйте s/::/ /g. \s обозначает только пробелы на соответствующей стороне, со стороны замены оно становится s.

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