2011-11-21 222 views
3

我正在写一个简单的程序 - 请参阅下面的代码和评论。有谁知道为什么空格字符在第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"; 

回答

15

尝试s/::/ /g而不是s/::/\s/g

\s实际上是代表所有空白字符的字符类,所以它才有意义将它在正则表达式(第一部分),而不是在替换字符串。

+0

谢谢,现在的作品。 – kurotsuki

3

使用s/::/ /g\s仅表示匹配侧上的空白,在替换侧上它变为s

3

替换字符串应该是文字的空间,即:

$string =~ s/::/ /g; 
3

与现实空间更换\s

\s是空白匹配模式的缩写。指定替换字符串时不使用它。