2011-11-21 2 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/::/\s/g 대신 s/::/ /g을 시도하십시오.

\s 실제로 모든 공백 문자를 나타내는 문자 클래스, 그래서 만이 아니라 대체 문자열에 비해 정규 표현식 (첫 번째 부분)에 그것을 가지고 의미가 있습니다.

+0

고마워 이제 작동합니다. – kurotsuki

3

s/::/ /g을 사용하십시오. \s은 일치하는면의 공백 만 나타냅니다. 대체면에서는 s이됩니다.

3

교체 문자열

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

실제 공간으로 \s를 교체, 즉 : 문자 그대로의 공간이어야한다.

\s은 공백 일치 패턴의 줄임말입니다. 대체 문자열을 지정할 때 사용되지 않습니다.