>

문자열의 특정 부분을 다른 부분으로 바꾸려면 어떻게해야합니까?

입력 문자열 :

"Hello, my name is Santa"

모든 a 를 어떻게 바꿀 수 있습니까 내 문자열에 다른 것이 있습니까?

나는 foreach 가 필요하다고 생각  반복하지만 사용 방법을 잘 모르겠습니다.


  • 답변 # 1

    strtr ($str, array ('a' => '<replacement>'));
    
    

    질문에보다 정확하게 대답하려면 :

    strtr ("Hello, my name is Santa", array ('a' => '<replacement>'));
    
    

  • 답변 # 2

    검색 및 교체

    문자열의 특정 부분을 다른 장점으로 대체 할 수있는 몇 가지 기능/방법이 있습니다.


    와이즈 위즈  (이진 안전;대소 문자 구분)방법

    인수

    와이즈 비즈

    str_replace()  위의 정의에서 올바른 순서로 볼 수 있듯이 3 개의 필수 인수가 있습니다. 모두 인수로 배열로 문자열을 사용할 수 있습니다!

    검색 및 교체

    검색 (문자열) 및 바꾸기 (문자열)→ 검색 문자열을 바꾸기 문자열로 바꿉니다.

    검색 (배열) 및 바꾸기 (문자열)→ 모든 검색 요소를 교체 문자열로 바꿉니다.

    search (string) AND replace (array)→ 다음과 같이 대체 배열이므로 "알림 : 문자열을 문자열로 변환"이라는 알림이 표시됩니다. 하나의 검색 문자열이 의미가 없으므로 배열을 문자열로 변환하기 위해시도합니다.

    검색 (배열) 및 바꾸기 (배열)→ 각 검색 요소를 해당 교체 요소로 바꿉니다 (키는 무시됩니다!)

    검색 (더 많은 요소) 및 바꾸기 (보다 적은 요소)→ 각 검색 요소를 해당 교체 요소로 바꿉니다 (없는 교체 요소의 경우 빈 문자열 사용됩니다).

    검색 (요소가 적음) 및 바꾸기 (더 많은 요소)→ 각 검색 요소를 해당 바꾸기 요소로 바꿉니다 (필요한 바꾸기 요소는 무시 됨).

    제목

    대상 (문자열)→ 제목 문자열을 교체합니다.

    대상 (배열)→ 각 배열 요소에 대해 교체가 완료되었습니다.

    코드

    mixed str_replace ( mixed$search, mixed$replace, mixed$subject[, int &$count ] )

    출력

    str_replace()
    
    

    참고

    <올>

    고트 차!

    알아야 할 중요한 것은 echo str_replace("search", "replace", "text search text"); echo str_replace(["t", "a"], "X", "text search text"); echo str_replace("search", ["replace1", "replace2"], "text search text"); echo str_replace(["a", "c"], ["X", "Y"], "text search text");  배열의 왼쪽에서 오른쪽으로 작동합니다. 즉, 이미 교체 한 값을 교체 할 수 있습니다. 예를 들면 다음과 같습니다.

    text replace text
    XexX seXrch XexX
    Notice: Array to string conversion
    text seXrYh text
    
    

    대소 문자를 구분하지 않음

    대소 문자를 구분하지 않으려면 str_replace() 를 사용할 수 있습니다  (와이즈 비즈주의 사항)  대소 문자 구분-i민감한 예).

    다차원 배열

    echo str_replace(array("a", "b"), array("b", "c"), "aabb"); //Probably expected output: bbcc //Actual output: cccc / str_ireplace()  다차원 배열에는 작동하지 않습니다. 이러한 구현에 대해서는이 매뉴얼 주석을 참조하십시오. 물론 당신은 또한 i 를 대체 할 수 있습니다   str_replace() 와 함께  대소 문자를 구분하지 않습니다.

    모든 것을 정리하고 대소 문자를 구분하지 않는 다차원 배열에서도 작동하는 함수를 만들려면 다음과 같이하면됩니다 :

    str_ireplace()
    
    


    와이즈 위즈  (50 % 이진 안전;대소 문자 구분)방법

    인수

    와이즈 비즈 이 함수는 from 및 to 문자열로 3 개의 인수를 받거나 대체 배열 str_replace() 로 2 개의 인수를받습니다. 위의 정의에서 올바른 순서로 볼 수 있습니다.

    2 개의 인수

    가장 긴 키를 해당 값으로 바꾸기 시작하고 모든 str_ireplace() 를 바꿀 때까지이를 수행합니다.  한 쌍. 이 경우 함수는 전체 키/값을 사용하므로 이진 안전합니다.

    3 개의 인수

    주제바이트 단위에서 from 인수를 to 인수로 대체합니다. 따라서 바이너리 안전하지 않습니다!

    from 및 to 인수의 길이가 동일하지 않으면 더 짧은 문자열의 끝에 도달하면 대체가 중지됩니다.

    제목

    배열을 제목으로 만 받아들이지 않고 문자열로만받습니다.

    코드

    <?php 
    function str_ireplace_deep($search, $replace, $subject) 
    { 
    if (is_array($subject)) 
    { 
        foreach($subject as &$oneSubject) 
            $oneSubject = str_ireplace_deep($search, $replace, $oneSubject); 
        unset($oneSubject); 
        return $subject; 
    } else { 
        return str_ireplace($search, $replace, $subject); 
    } 
    } 
    ?>
    
    

    출력

    strtr()
    
    

    참고

    <올>

    고트 차!

    string strtr ( string$str, string$from, string$to)

    string strtr ( string$str, array$replace_pairs)

    와 반대 array("search" => "replace" /* , ... */)  무언가를 두 번 대체하지 않습니다. 예를 들어 :

    key => value
    
    

    또한 여러 문자열을 같은 문자열로 바꾸려면 echo strtr("text search text", "ax", "XY");; echo strtr("text search text", ["search" => "replace"]); 를 사용할 수 있습니다  대체 배열을 값으로 채우려면

    대소 문자를 구분하지 않음

    teYt seXrch teYt text replace text  대소 문자를 구분하지 않습니다. 대소 문자를 구분하지 않는 동등한 기능이 없습니다. 대소 문자를 구분하지 않는 구현에 대해서는이 매뉴얼 주석을 참조하십시오.

    다차원 배열

    str_replace()   strtr() 에 반대  배열은 주제로 작동하지 않으므로 다차원 배열에서도 작동하지 않습니다. 물론 echo strtr("aabb", ["a" => "b", "b" => "c"]); //Expected output: bbcc //Actual output: bbcc 에서 위의 코드를 사용할 수 있습니다  다차원 배열의 경우 array_fill_keys() 와 함께 사용하십시오.  또는 strtr() 의 구현.

    모든 것을 정리하고 대소 문자를 구분하지 않는 다차원 배열에서도 작동하는 함수를 만들려면 다음과 같이하면됩니다 :

    strtr()
    
    


    와이즈 위즈  (이진 안전;대소 문자 구분)방법

    인수

    와이즈 비즈

    str_replace()  위에 표시된 순서대로 3 개의 필수 매개 변수가 있습니다. 이제 3 개 모두 문자열을 인수로 배열로 사용할 수 있습니다!

    검색 및 교체

    검색 (문자열) 및 바꾸기 (문자열)→ 검색 정규식의 모든 일치 항목을 바꾸기 문자열로 바꿉니다.

    검색 (배열) 및 바꾸기 (문자열)→ 각 검색 정규식의 모든 일치 항목을 바꾸기 문자열로 바꿉니다.

    검색 (문자열) 및 바꾸기 (배열)→ 경고 : "경고 : preg_replace () : 매개 변수가 일치하지 않습니다. 패턴은 문자열입니다. 하나의 검색 정규식에 대한 대체 배열은 의미가 없으므로 대체는 배열입니다 "

    검색 (배열) 및 바꾸기 (배열)→ 각 검색 정규식의 모든 일치 항목을 해당 교체 요소로 바꿉니다 (키는 무시됩니다!).

    검색 (더 많은 요소) 및 바꾸기 (더 적은 요소)→ 각 검색 정규식의 모든 일치 항목을 해당 교체 요소로 바꿉니다 (없는 교체 요소의 경우 빈 문자열이 사용됩니다).

    검색 (요소가 적음) 및 바꾸기 (더 많은 요소)→ 각 검색 정규식의 모든 일치 항목을 해당 바꾸기 요소로 바꿉니다 (필요하지 않은 바꾸기 요소는 무시 됨) ).

    제목

    대상 (문자열)→ 제목 문자열을 교체합니다.

    대상 (배열)→ 각 배열 요소에 대해 교체가 완료되었습니다.

    다시 참고하십시오 : 검색은 정규식이어야합니다! 즉, 구분 기호가 필요하고 특수 문자를 이스케이프해야합니다.

    코드

    str_replace()
    
    

    출력

    strtr()
    
    

    참고

    <올>

    고트 차!

    stritr() 와 동일 <?php if(!function_exists("stritr")){ function stritr($string, $one = NULL, $two = NULL){ /* stritr - case insensitive version of strtr Author: Alexander Peev Posted in PHP.NET */ if( is_string( $one ) ){ $two = strval( $two ); $one = substr( $one, 0, min( strlen($one), strlen($two) ) ); $two = substr( $two, 0, min( strlen($one), strlen($two) ) ); $product = strtr( $string, ( strtoupper($one) . strtolower($one) ), ( $two . $two ) ); return $product; } else if( is_array( $one ) ){ $pos1 = 0; $product = $string; while( count( $one ) > 0 ){ $positions = array(); foreach( $one as $from => $to ){ if( ( $pos2 = stripos( $product, $from, $pos1 ) ) === FALSE ){ unset( $one[ $from ] ); } else{ $positions[ $from ] = $pos2; } } if( count( $one ) <= 0 )break; $winner = min( $positions ); $key = array_search( $winner, $positions ); $product = ( substr( $product, 0, $winner ) . $one[$key] . substr( $product, ( $winner + strlen($key) ) ) ); $pos1 = ( $winner + strlen( $one[$key] ) ); } return $product; } else{ return $string; } }/* endfunction stritr */ }/* endfunction exists stritr */ function stritr_deep($string, $one = NULL, $two = NULL){ if (is_array($string)) { foreach($string as &$oneSubject) $oneSubject = stritr($string, $one, $two); unset($oneSubject); return $string; } else { return stritr($string, $one, $two); } } ?>  배열의 왼쪽에서 오른쪽으로 작동합니다. 즉, 이미 교체 한 값을 교체 할 수 있습니다. 예를 들면 다음과 같습니다.

    preg_replace()
    
    

    대소 문자를 구분하지 않음

    검색 인수가 정규식이므로 간단히

    mixed preg_replace ( mixed$pattern, mixed$replacement, mixed$subject[, int $limit = -1 [, int &$count ]] )

    를 전달할 수 있습니다.  대소 문자를 구분하지 않는 검색을 위해.

    다차원 배열

    preg_replace()  다차원 배열에서는 작동하지 않습니다.

    역 참조

    echo preg_replace("/search/", "replace", "text search text"); echo preg_replace(["/t/", "/a/"], "X", "text search text"); echo preg_replace("/search/", ["replace1", "replace2"], "text search text"); echo preg_replace(["a", "c"], ["X", "Y"], "text search text"); 를 사용할 수 있습니다 / text replace text XexX seXrch XexX Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array text seXrYh text  정규 표현식의 캡처 그룹에 대한 역 참조로. 어디 str_replace()  전체 경기와 preg_replace() 입니다  캡처 그룹을 위해.

    역 참조 뒤에 바로 숫자가 나오는 경우 echo preg_replace(["/a/", "/b/"], ["b", "c"], "aabb"); //Probably expected output: bbcc //Actual output: cccc 를 사용해야합니다 .

    대체/"/ e 수정자가 더 이상 사용되지 않습니다"

    flag i 의 교체  콜백 함수를 대체물로 사용할 수 없습니다. 따라서 preg_replace() 를 사용해야합니다 . 수정 자 \\n 를 사용할 때와 동일  "더 이상 사용되지 않음 : preg_replace () :/e 수정자가 더 이상 사용되지 않습니다. 대신 preg_replace_callback을 사용하십시오". 참조 : preg_replace () e 수정자를 preg_replace_callback으로 교체

    모든 것을 정리하고 대소 문자를 구분하지 않는 다차원 배열에서도 작동하는 함수를 만들려면 다음과 같이하면됩니다 :

    $n
    
    


    루프 와이즈 비즈  / 0  / 1-99  (이진 안전하지 않음;대소 문자 구분)방법

    물론 이제 모든 함수 외에도 간단한 루프를 사용하여 문자열을 반복하고 각 \${n} 를 바꿀 수 있습니다.  당신이 가진 쌍.

    그러나 위의 함수를 사용하는 것보다 이진 안전하고 대소 문자를 구분하지 않으며 다차원 배열의 경우 더 복잡합니다. 여기에 예를 포함시키지 않겠습니다.


    <시간 /> 영향을받는 문자열

    지금 위에 표시된 모든 메소드가 전체 문자열을 대체합니다. 하지만 때로는 문자열의 특정 부분에만 무언가를 바꾸고 싶을 때가 있습니다.

    이를 위해 아마도 preg_replace() 를 사용하고 싶을 것입니다 . 또는 다른 일반적인 방법은 preg_replace_callback() 를 사용하는 것입니다  특정 하위 문자열에만 교체를 적용하고 문자열을 나중에 함께 넣으십시오. 물론 정규식을 수정하거나 전체 문자열에 대체를 적용하지 않는 다른 작업을 수행 할 수도 있습니다.

  • 답변 # 3

    str_replace는 간단한 교체 작업 (단일 문자 교체)에는 충분하지만 일반적으로 preg_replace를 사용하는 것이 좋습니다 (보다 유연한 것을 원하거나 융통성 있고 다재다능하므로 다용도). 그리고 'a'는 단지 예일 뿐이므로 ... :

    e
    
    

    한 번에 여러 번 교체하려는 경우 :

    <?php
    function preg_replace_deep($search, $replace, $subject) 
    { 
    if (is_array($subject)) 
    { 
        foreach($subject as &$oneSubject) 
            $oneSubject = preg_replace_deep($search, $replace, $oneSubject); 
        unset($oneSubject); 
        return $subject; 
    } else { 
        return preg_replace($search, $replace, $subject); 
    } 
    } 
    ?>
    
    

    preg_replace는 불행히도 사용하기가 까다로울 수 있습니다. 나는 다음과 같은 읽을 것을 권장합니다 : http://php.net/manual/en/function.preg-replace.php http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html

    또한 str_replace ()를 사용하기로 결정하고 대소 문자를 구분해야하는 경우 str_ireplace ()가 필요합니다.

  • 답변 # 4

    PHP 문자열 함수, 여기에서 'a'를 '&'앰퍼샌드 문자로 변경 :

    while
    
    

  • 답변 # 5

    preg_replace () 함수 사용

    for
    
    
    foreach

관련 자료

  • 이전 라벨로 내부 레이어 출력이 필요한 맞춤형 손실 기능의 Keras 구현
  • 다음 angular - POST/PUT/PATCH 요청과 함께 페이로드 데이터를 Sentryio로 전송