문제

나는 다음과 같은 텍스트를 분할하는 방법이 있는지 알고 싶습니다.

123456789로 123-456-789

3 자마다 "-"를 추가하려면?

그 반대를 알고 있듯이 알고 싶었지만이 작업을 수행하는 방법은 내 머리 위에 있습니다. ;)

그리고 텍스트가 있다면

ABCDEFGHI OR A1B2C3D4E or any other format 
without any space between the characters !

languge : PHP only
도움이 되었습니까?

해결책

<?php
$i = '123456789';
echo 'result: ', wordwrap($i, 3, '-', true);
인쇄물
result: 123-456-789

보다 http://php.net/wordwrap

다른 팁

나는 간단한 스트링 추출 (특히 고정 길이 추출)에 대한 Regexes의 열렬한 팬이 아니며 약간 더 복잡한 것들을 선호합니다. 거의 모든 언어에는 하위 문자열 기능이 있으므로 입력이 이미 검증되었다고 가정하면 간단합니다 (언어를 지정하지 않았기 때문에 의사 코드).

s = substring (s,0,3) + "-" + substring (s,3,3) + "-" + substring (s,6,3)

가변 길이 문자열의 세 문자마다 원하는 경우 (끝에 홀수 크기) :

t = ""
sep = ""
while s != "":
    if s.len <= 3:
        t = t + sep + s
        s = ""
    else:
        t = t + sep + substring (s,0,3)
        s = substring (s,3)
    sep = "-"
s = t

어떤 언어라도 :

  • "결과"라는 빈 문자열 변수 생성
  • 정수 카운터 변수 "i"를 만듭니다. 원래의 문자열 (숫자가있는 사람)
  • 원래 문자열에서 "결과"로 각 문자를 추가하십시오.
  • Modulo 3 (일반적으로 % 또는 mod)이 0이면 "결과"에 대시를 추가하십시오.

완전성을 위해 여기에 파이썬 솔루션이 있습니다.

>>> a = "123456789"
>>> a[0:3] + "-" + a[3:6] + "-" + a[6:9]
'123-456-789'

PHP 솔루션을 지정하기 위해 질문을 업데이트 했으므로 다음과 같습니다.

substr($a, 0, 3) . "-" . substr($a, 3, 3) . "-" . substr($a, 6, 3)

보다 substr 이 기능에 대한 자세한 내용은 이것은 숫자뿐만 아니라 알파벳 문자에도 효과적입니다.

또 다른 파이썬 버전 :

>>> x="123456789"
>>> out=[x[i:i+3] for i in xrange(0, len(x), 3)]
>>> print "-".join(out)
123-456-789

나는 이것이 Lookahead와 함께 재선에서 샌디로 이루어질 수 있다고 생각합니다.

s/(.{3})(?=.)/$1-/g

의견에 PHP를 언급 한 이후 :

preg_replace ("/(.{3})(?=.)/", "$1-", $string);

편집하다: Volkerk가 보여준 후 wordwrap, 나는 찾았다 chunk-split 문서에서 :

$new_string = chunk_split ($string, 3, '-');

이것은 문자열에 공백이있을 때도 작동한다는 이점이 있습니다 (WordWrap은 공간에서 파손되는 것을 선호합니다).

Perl에서 :

#!/usr/bin/perl

use strict;
use warnings;

my $string = "123456789";
$string =~ /(\d{3})(\d{3})(\d+)/;

print "$1-$2-$3"

정규 표현식 일치 및 교체로 (다른 수단 중에서도) 할 수 있습니다. 정확한 구문은 사용중인 도구 또는 프로그래밍 언어에 따라 다릅니다. 예를 들어, Perl에서 수행하는 한 가지 방법은

$a = "123456789";
$a =~ s/(\d{3})/$1-/g;
chop($a);
print $a;

라인 2는 3 자리 숫자를 동일한 3 자리와 대시로 대체합니다. chop ()를 사용하여 후행 대시를 삭제합니다.

여기에 또 다른 질문이 있습니다. 문자열에 다중 x 3 자릿수가 포함되어 있지 않으면 어떻게해야합니까? 그러한 문자열이 허용되면 위의 스 니펫은 수정이 필요합니다.

또한 사례의 세부 사항에 따라 간단한 하부 스트링 교체 또는 스트링 슬라이싱으로 도망 갈 수 있습니다.

하나의 펄 예제. 이것은 3보다 작은 최종 그룹을 제거하지 않으며 3 자리 미만의 초기 그룹 만 남습니다. "돈 숫자"예제에 기반을두고 있습니다. 학습 perl (5 번째 ed 212 페이지) :

#!/usr/bin/env perl
use strict;
use warnings;

print "Gimme' a number: ";
chomp(my $number = <STDIN>);

1 while ($number =~ s/([0-9]{3})([0-9]+)/$1-$2/);

print "Now it's $number\n";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top