여러 항목에 대한 Str_replace


115

이전에이 작업을 기억하지만 코드를 찾을 수 없습니다. 나는 str_replace를 사용 str_replace(':', ' ', $string);하여 다음과 같은 하나의 문자를 대체합니다. 그러나 \/:*?"<>|각각에 대해 str_replace를 수행하지 않고 다음 문자를 모두 대체하고 싶습니다 .


2
이 모든 문자를 공백으로 바꾸시겠습니까?
Book Of Zeus

7
훌륭한 php.net 매뉴얼을 참조하고 params 섹션검토하여 원하는 것이 가능한지 확인하는 것을 두려워하지 마십시오 .
Mike B

답변:


117

str_replace() 배열을 취할 수 있으므로 다음을 수행 할 수 있습니다.

$new_str = str_replace(str_split('\\/:*?"<>|'), ' ', $string);

또는 다음을 사용할 수 있습니다 preg_replace().

$new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string);

2
OP가 백 슬래시를 교체해야 함을 의미한다고 가정하면 preg_replace 패턴이 작동하지 않았습니다. 백 슬래시가 예상대로 작동하도록하려면 패턴에 4 개 (예 : "\\\\")를 사용해야했습니다.
GreenMatt 2011 년

1
좋은 대답, @dogbert 대답을 추가하면 설명서를 읽지 않고 str_split이 배열을 반환한다는 것을 깨닫지 못하는 사람들을 위해 완료됩니다.
Bradmage

OP의 경우 str_replace()over preg_replace()(또는 그 반대) 의 장점은 무엇입니까 ?
ludditedev

1
@ludditedev 없음 실제 이점 어느 쪽이든, 그것은 취향의 문제 없다
NullUserException

1
@MadhurBhaiya 변경에 정규식 '~[\\+><-]~'합니다 (참고 -)입니다. 대시 ( -)는 정규식 메타 문자이므로 문자 클래스 (안에있는 모든 것 []) 에서 이스케이프하거나 전략적으로 배치해야합니다 . 이 답변을 참조하십시오 : stackoverflow.com/a/7604888/396458
NullUserException

181

이렇게 :

str_replace(array(':', '\\', '/', '*'), ' ', $string);

또는 최신 PHP (5.4 이상)에서는 약간 덜 장황한 것입니다.

str_replace([':', '\\', '/', '*'], ' ', $string);

73

예를 들어 search1을 replace1로 바꾸고 search2를 replace2로 바꾸려면 다음 코드가 작동합니다.

print str_replace(
    array("search1","search2"),
    array("replace1", "replace2"),
    "search1 search2"
);

// 출력 : replace1 replace2


48
str_replace(
    array("search","items"),
    array("replace", "items"),
    $string
);


2

preg_replace () 사용할 수 있습니다 . 다음 예제는 명령 줄 php를 사용하여 실행할 수 있습니다.

<?php
$s1 = "the string \\/:*?\"<>|";
$s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ;
echo "\n\$s2: \"" . $s2 . "\"\n";
?>

산출:

$ s2 : "문자열"


문자 클래스 내부에서 너무 많은 이스케이프. (허용 대답 참조)
mickmackusa

0

HTML 태그를 두 개의 다른 대체 결과로 바꿔야하는 상황이있었습니다.

$trades = "<li>Sprinkler and Fire      Protection Installer</li>
<li>Steamfitter </li>
<li>Terrazzo, Tile and Marble      Setter</li>";

$s1 =  str_replace('<li>', '"', $trades);

$s2 = str_replace('</li>', '",', $s1);

echo $s2;

결과

"스프링클러 및 화재 방지 설치", "Steamfitter", "Terrazzo, 타일 및 대리석 세터",


0

나는 당신이 이것을 돌보고 있다고 생각합니다.

// example
private const TEMPLATE = __DIR__.'/Resources/{type}_{language}.json';

...

public function templateFor(string $type, string $language): string
{
   return \str_replace(['{type}', '{language}'], [$type, $language], self::TEMPLATE);
}

0

제 사용 사례에서는 HTML 문서의 일부 필드를 매개 변수화하고 이러한 필드를로드하면 str_replace 메서드를 사용하여 일치하고 바꿉니다.

<?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.