문자열의 일부를 제거하는 방법? [닫은]


152

문자열의 일부를 어떻게 제거합니까?

문자열 예 : "REGISTER 11223344 here"

"11223344"위 예제 문자열에서 어떻게 제거 할 수 있습니까?


귀하의 질문은 명확하지 않거나 모호합니다. 이라는 용어를 사용하고 remove있지만 extract대상 문자열을 데이터베이스에 저장할 수 있음 을 의미하는 것 같습니다 .
mickmackusa

@Makyen 나는 당신이 많은 답변을 올바르게 만들기 위해 질문을 파괴했다고 확신합니다. OP를 REGISTER here데이터베이스 에 저장하려는 이유는 무엇입니까?
mickmackusa

2
@mickmackusa remove는 문자열에서 11223344를 가져 오는 것과 동의어가 될 수 있습니다. 여기서 문제를 보지 못했습니다. 최악의 경우 모호하지만 확실히 "파기"되지는 않습니다.
Nick

사전 파손 된 버전을 읽으십시오. @Nick stackoverflow.com/posts/2192170/revisions 진실은 당신의 마음을 바꿀 것입니다. 이 질문이 불분명 한 것으로 종료되어 기쁩니다.
mickmackusa

2
@ mickmackusa 내가 한 ... 당신의 요점을 볼 수 없습니다. 당신이 서면으로 방법에 큰 문제가있는 경우 왜 직접 해결하지 마십시오
Nick

답변:


220

"11223344"를 구체적으로 타겟팅하는 경우 다음을 사용하십시오 str_replace.

// str_replace($search, $replace, $subject)
echo str_replace("11223344", "","REGISTER 11223344 here");

4
str_replace ($ search, $ replace, $ subject)
drooh

119

str_replace ()를 사용할 수 있으며 다음과 같이 정의됩니다.

str_replace($search, $replace, $subject)

따라서 코드를 다음과 같이 작성할 수 있습니다.

$subject = 'REGISTER 11223344 here' ;
$search = '11223344' ;
$trimmed = str_replace($search, '', $subject) ;
echo $trimmed ;

정규식을 통해 더 나은 일치가 필요한 경우 preg_replace ()를 사용할 수 있습니다 .


2
정규식 일치가 필요한 경우 preg_replace () us2.php.net/manual/en/function.preg-replace.php
Elijah Lynn

4
이 답변이 게시 된 이유를 잘
모르면

23

11223344가 일정하지 않다고 가정

$string="REGISTER 11223344 here";
$s = explode(" ",$string);
unset($s[1]);
$s = implode(" ",$s);
print "$s\n";

10
str_replace(find, replace, string, count)
  • 필수를 찾으십시오 . 찾을 값을 지정합니다
  • 교체 필수. 찾기 에서 값을 대체 할 값을 지정합니다.
  • 문자열 필수 항목. 검색문자열 을 지정합니다
  • count 선택 사항. 교체 횟수를 계산하는 변수

OP 예에 따라 :

$Example_string = "REGISTER 11223344 here";
$Example_string_PART_REMOVED = str_replace('11223344', '', $Example_string);

// will leave you with "REGISTER  here"

// finally - clean up potential double spaces, beginning spaces or end spaces that may have resulted from removing the unwanted string
$Example_string_COMPLETED = trim(str_replace('  ', ' ', $Example_string_PART_REMOVED));
// trim() will remove any potential leading and trailing spaces - the additional 'str_replace()' will remove any potential double spaces

// will leave you with "REGISTER here"

1
OP가이 의사 코드를 사용하도록 제안하는 방법은 무엇입니까?
mickmackusa

6

규칙 기반 일치가 필요한 경우 정규식을 사용해야합니다.

$string = "REGISTER 11223344 here";
preg_match("/(\d+)/", $string, $match);
$number = $match[1];

첫 번째 숫자와 일치하므로 더 구체적으로 시도 해야하는 경우 :

$string = "REGISTER 11223344 here";
preg_match("/REGISTER (\d+) here/", $string, $match);
$number = $match[1];

preg_replace ()는 훨씬 쉽지 않을까요? us2.php.net/manual/en/function.preg-replace.php
Elijah Lynn

1
@ElijahLynn replace를 사용하면 사물을 제거해야합니다. 향후 변경 또는 소음이 발생합니다. _replace를 통해이 작업을 수행하지만 _match는 계속 작동합니다.
트래비스 O

@TravisO 물론 그렇습니다. 이 두 가지는 거의 동일한 기능 구현 방식 이며 향후 변경 사항이 영향을 미칠 가능성은 동일 합니다. _match에서만 향후 변경 될 가능성이 동일하므로이 사용은 유효하지 않으며 _replace는 여전히 제대로 작동합니다. 또한 버전 관리는 일반적으로 가능한 경우 이전 기능을 제동하지 않는 것이 매우 중요합니다.
CT.

여기에는 캡처 그룹이 필요하지 않습니다. 실제로 캡처 그룹을 사용하면 불필요하게 $match어레이가 팽창합니다 . 괄호를 제거하고를 통해 액세스하십시오 $match[0].
mickmackusa

5

substr ()은 문자열의 일부를 반환하는 내장 PHP 함수입니다. substr () 함수는 문자열을 입력으로 사용하며, 문자열을자를 색인 형식입니다. 선택적 매개 변수는 부분 문자열의 길이입니다. http://php.net/manual/en/function.substr.php 에서 적절한 문서와 예제 코드를 볼 수 있습니다

참고 : 문자열의 색인은 0으로 시작합니다.


OP가 원하는 결과를 얻기 위해 일반적인 힌트를 사용해야한다고 어떻게 제안합니까?
mickmackusa

이 답변은 모호하고 값이 낮습니다.
mickmackusa

1

동적으로 문자열의 (a) 고정 인덱스에서 (a) 부분을 제거하려면이 함수를 사용하십시오.

/**
 * Removes index/indexes from a string, using a delimiter.
 * 
 * @param string $string
 * @param int|int[] $index An index, or a list of indexes to be removed from string.
 * @param string $delimiter 
 * @return string
 * @todo Note: For PHP versions lower than 7.0, remove scalar type hints (i.e. the
 * types before each argument) and the return type.
 */
function removeFromString(string $string, $index, string $delimiter = " "): string
{
    $stringParts = explode($delimiter, $string);

    // Remove indexes from string parts
    if (is_array($index)) {
        foreach ($index as $i) {
            unset($stringParts[(int)($i)]);
        }
    } else {
        unset($stringParts[(int)($index)]);
    }

    // Join all parts together and return it
    return implode($delimiter, $stringParts);
}

당신의 목적을 위해 :

remove_from_str("REGISTER 11223344 here", 1); // Output: REGISTER here

사용법 중 하나는 구조와 같은 명령 같은 문자열을 실행하는 것입니다.


1
Ghostdog은 이미 explode-implode 기법을 제안했지만, 그런 기본적인 작업을 위해 오랜 기술을 사용하는 것은 상상할 수 없습니다.
mickmackusa

0

다음 스 니펫은 "REGISTER here"를 인쇄합니다.

$string = "REGISTER 11223344 here";

$result = preg_replace(
   array('/(\d+)/'),
   array(''),
   $string
);

print_r($result);

preg_replace () API 사용법은 아래와 같습니다.

$result = preg_replace(
    array('/pattern1/', '/pattern2/'),
    array('replace1', 'replace2'),
    $input_string
);

preg_replace()이 경우 배열을 전달할 이유가 전혀 없습니다 . 캡처 그룹을 사용하는 것의 이점도 없습니다.
mickmackusa

나는 동의한다. 편의상 배열이 추가되었습니다. 무시할 수 있습니다. 해를 끼치 지 않을 것입니다. 숫자를 제외하기 위해 캡처 그룹을 추가했습니다. 이것은 플롯 된 질문에 따라 작동합니다. 또한 개인에 따라 추가 수정 및 미세 조정을 수행 할 수 있습니다.
arango_86

내 요점은 스 니펫에 포함하지 않는 불필요한 포함이 있다는 것입니다.
mickmackusa

-1

다음을 수행하십시오

$string = 'REGISTER 11223344 here';

$content = preg_replace('/REGISTER(.*)here/','',$string);

"REGISTERhere"를 반환합니다.

또는

$string = 'REGISTER 11223344 here';

$content = preg_replace('/REGISTER (.*) here/','',$string);

"REGISTER here"가 반환됩니다.


4
두 개의 공백이있는 "REGISTER__here"를 반환하지 않습니까 (공백으로 밑줄을 생각하면 주석에서 두 개의 후속 공백을 허용하지 않습니다)? "(. *)"앞뒤 공백.
TechNyquist

6
이 답변은 적어도 100 % 잘못되었습니다. 증명: 3v4l.org/LDLEM 왜이 답변에 15 개의 UV가 있습니까?
mickmackusa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.