2014-07-14 3 views
1

Perl의 여러 위치에서 문자열에 문자를 삽입하는 가장 좋은 방법은 무엇입니까? 숫자가 아닌 문자를 제거한 문자열이 있습니다. 그 후, 끝에서부터 네 번째 위치와 여덟 번째 위치에 대시를 삽입하고 싶습니다. XXX-XXX-XXXXPerl에서 문자열에 문자를 삽입하는 가장 좋은 방법은 무엇입니까?

$number =~ s/[^0-9]//g; 
substr($number, -4, 0, '-'); 
substr($number, -8, 0, '-'); 

위의 코드를 할 수 있지만, 한 줄에 할 수있는 정규 표현식이 있습니까 : 당신은 그들이 모두 같은 형식을 가질 수 있도록 나는 모든 입력 된 전화 번호를 수정하고있어, 그것을 짐작? 내가 모르는 뭔가가 더 효율적인가?

미리 감사드립니다. 성능에 대한

$number =~ s/(...)(...)(....)$/$1-$2-$3/ 
+1

's의/(\ d를 {3}) (\ d를 {3 }) (\ d {4})/$ 1- $ 2- $ 3 /' – chilemagic

+0

허용되는 문자에 실제로'+'가 필요합니까? – Miller

+0

@Miller 나는 추측한다. 지금 편집합니다. 감사! –

답변

5

이 또한 작동

join('-', unpack 'A3 A3 A4', $number) 
4

확실하지,하지만 unpack - 및 - join도 작동합니다 :

+1

빠른 벤치 마크는 정규식 솔루션보다 평균 2 배 빠르다는 것을 보여줍니다. 'unpack '은 고정 너비 데이터의 경우 왕이됩니다. :-) – Slade

관련 문제