2014-04-18 7 views
-1

문자열의 단일 백 슬래시를 이중 백 슬래시로 바꾸려면 어떻게해야합니까?정규식을 사용하여 백 슬래시를 두 개의 백 슬래시로 바꾸기

나는

s/\\(?!\\)/\\\\/g 
s/\\/\\\\/g 
s/[^//]/\\\\/g 

같은 것들을 시도했습니다하지만 그들은 모두 서로 후 여러 백 슬래시를 생산하고 있습니다.

그래서 내가 원하는 :

\test 

\\test 

편집으로 대체 될 : 그래서 난 단지 문자열과 일치하는 정규식이 필요 죄송합니다 내가 또한 정규식 루프에 있음을 언급해야한다 백 슬래시가 하나 뿐인 경우. 백 슬래시가 두 개 이상 있으면 정규식은 문자열을 거부해야합니다.

my $str = '\test'; 

$str =~ s{\\}{\\\\}g; 

print $str; 

출력 :

\\test 

일이 모든 기대어 타워가 뒤죽박죽되지 않도록주의해야 할 사과

+1

당신이 이중 blackslashes이 배 지거나하지 하시겠습니까 나오지 N 단지 부정적 예측 및 lookbehind 주장을 사용할 수 있습니까? – AntonH

+0

짝수 개의 백 슬래시는 어떨까요? –

+0

'$ subject = ~ s /\\\$$ 1/g;' –

답변

3

가장 도움이되는 것은, 정규식에 대해 다른 구분 기호를 사용하는 것입니다 업데이트

수정 된 사양에 따라 하나의 백 슬래시 만 이스케이프하고 다른 모든 것은 무시하려는 경우

my $str = <<'END_STR'; 
\one \\two \\\three 
END_STR 

print $str; 

$str =~ s{(?<!\\)\\(?!\\)}{\\\\}g; 

print $str; 

출력 :

\one \\two \\\three 
\\one \\two \\\three 
+0

당신의 정규식은 기술적으로 옳지 만 제 질문에 사과를 더했습니다. – ashxu

+0

@ashxu 수정 된 사양에 따라 답변을 업데이트했습니다. 아마도 그것이 당신이 원하는 것 일 것입니다. – Miller

1
echo '\replace' | perl -pe 's/\\/\\\\/g' 
\\replace 

OR로

# echo '\replace' | sed 's/\\/\\\\/g' 
\\replace 
관련 문제