문자열의 특정 부분을 다른 부분으로 바꾸려면 어떻게해야합니까?
입력 문자열 :
"Hello, my name is Santa"
모든
a
를 어떻게 바꿀 수 있습니까
내 문자열에 다른 것이 있습니까?
foreach
가 필요하다고 생각
반복하지만 사용 방법을 잘 모르겠습니다.
-
답변 # 1
-
답변 # 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
관련 자료
- python - 특정 조건을 충족하는 경우 문자열의 문자 교체
- python - 문자열에서 알려지지 않은 특정 단어 교체
- bash - 문자열을 바꾸고 같은 필드의 특정 위치에 문자를 삽입합니다
- node.js - Javascript에서 문자열의 특정 형식을 대체하는 방법이 있습니까?
- python - 문자열이 특정 값으로 끝나는 경우 값을 바꿉니다
- 자바 스크립트 문자열은 한 번에 하나씩 교체하고 배열에 추가합니다
- python - Pandas 데이터 프레임에서 특정 문자열을 포함하지 않는 모든 값을 바꿉니다
- c# - 문자열 내부의 텍스트 교체
- bash - 문자열 패턴의 모든 발생을 문자열이 발견 된 순서에 따라 문자열과 일치하는 숫자로 바꾸는 방법
- 여러 줄 문자열의 일부를 sed로 바꾸는 방법
- javascript - 문자열에서 여러 "\ n"을 일치시키고 단일 "\ n"으로 바꾸는 방법
- r - 문자열 3의 요소 교체 - 패턴 뒤 10 자리
- 자바 스크립트에서 문자열의 선행 0을 최대 3 개로 바꿉니다
- javascript - 문자열의 특정 부분을 추출
- bash - Linux에서 sed를 사용하여 문자열을 여러 세미콜론 및 특수 문자로 바꾸는 방법
- bash - 이름에 특정 문자열이있는 모든 디렉토리 (및 하위 디렉토리)를 복사합니다
- python - 문자열의 일부를 자체 변수에 할당
- c# - 문자열의 숫자를 숫자 + "f"로 대체
- python - 이전 문자열 교체
- java - "ABCDEFG"라는 문자열이 있다고 가정합니다 이제이 문자열의 짝수 값을 ASCII 값으로 바꾸고 싶습니다 어떻게해야합니까?
- 배열 키를 PHP Laravel에서 임의의 문자열로 변환하는 방법
- java - 한 문자열에서 다른 문자열을 제거하려면 어떻게해야합니까?
- R의 문자열에서 이러한 요소를 제거하는 방법
- PHP는 문자열 내에서 문자열 뒤의 문자열을 반환합니다
- PHP에서 여러 문자열에 대한 텍스트를 검색하는 방법
- string - 자바 스크립트는 부분 문자열을 제거하고 추가
- PHP로 HTML 양식의 작업 속성을 어떻게 동적으로 변경합니까?
- javascript - 문자열에서 범위를 벗어난 ASCII 문자 제거
- php - 문자열을 구문 분석하고 특수 텍스트 링크 [a href ="url"] 텍스트 [/ a]를 HTML 링크로 변환
- 파이썬에서 문자열의 특정 키워드를 삭제할 수 있습니까?
질문에보다 정확하게 대답하려면 :