2011-09-08 8 views
2
내가 탭을 제거하려면 다음 펄 표현을 사용하고

here제거 탭 문자 - 펄

$text =~ s{(.*?)\t}{$1.(' ' x ($g_tab_width - length($1) % $g_tab_width))}ge; 

에서 나는

다음 (사 개 공간의 가정 탭 폭) 아래로 내 이해와 번역을 단순화했습니다
$text =~ s/(.*?)\t/' '/; 

하지만 난

는 possib 일을 쉽게 확인 아인슈타인의 지시를 깨진 것 같은 느낌이 르,하지만 단순하지.

다음 입력 문자열을 테스트 중입니다.

"\t \t" 
"\t\t \t" 
"\t\t \t\t \t" 
"\t\t \t\t  \t" 

이 두 결과가 일치하지 않는 입력 문자열을 보여줄 수 있습니까?

+0

두 번째 것은 대체물에서'$ 1'을 참조하지 않으므로 작동하지 않습니다 ... 오타가 아닌 한? –

+2

탭을 잘못 이해합니다. 탭은 가변 개수의 공백을 나타내며 일정한 공백을 나타냅니다. – tchrist

+0

아마도 [perltidy] (http://search.cpan.org/perldoc?perltidy)와 같은 것을 찾고 계십니까? – TLP

답변

2

(제거 탭의 문제 공간 내에서) 나는 두 번째 단순화 된 표현이 있어야하는데이라고 가정합니다 :

$text =~ s/(.*?)\t/$1 /g; 
# four spaces -------^^^^ 

$g_tab_width는 4입니다; 그 밖의 어떤 것도 나에게 여기에 의미가 없으므로 나는 위험하게 살며 모든 것이 합리적이라고 가정합니다.

이렇게하면 탭이있는 거의 모든 것이 다른 결과를 생성합니다. 예를 들어 :

"where\tis pancakes house?" 

이 결과를 생성합니다 :

"Where is pancakes house?" # Long method. 
"Where is pancakes house?" # Simplified method. 

라이브 버전 : http://ideone.com/LbnNx

그들은 모두이 아닌 탭 구성 요소가 모두 4 때 같은 결과가 생성됩니다 유일한 시간 * n 자 길이 예 :

"xxxx\tyyyy\tzzzz" 

실시간 버전 : http://ideone.com/Kvp3l

+0

고맙습니다. – hawkeye

+0

'$ text = ~ s/\ t// g;'(물론 4 칸 포함)이 작동하지 않는 이유가 있습니까? 탭 문자를 유지하려고합니까 아니면 모두 바꾸겠습니까? –

+0

@Sho : 그는'$ text = ~ s {(. *?) \ t} {$ 1 ($ g_tab_width - 길이 ($ 1) % $ g_tab_width} 탭 당 탭에 따라 달라집니다. –