2016-10-27 2 views
2

제가PHP에서 문자열의 개별 단어를 바꾸는 방법은 무엇입니까?

$words = array(
'one' => 1, 
'two' => 2, 
'three' => 3 
); 

$str = 'One: This is one and two and someone three.'; 

$result = str_ireplace(array_keys($words), array_values($words), $str); 

으로 배열하여 소정의 대체물로 단어를 교체해야하지만,이 방법은 some1-someone 바꾼다. 개별 단어를 대체해야합니다.

+0

를 참조 미리 교체() 함수를 사용합니다. 우리가 효과적으로 당신을 도울 수 있도록 정확한 코드 예제를 제공하십시오. – Chris

+0

@Chris 죄송합니다, 내 실제 코드는 여기에 복사/붙여 넣기가 너무 복잡해서 typoe로 간단한 것을 썼습니다 : p – Googlebot

+0

regex가 더 잘 작동하지만 간단한 문자열 작업을 위해서는 'one'대신 'one' 공간을 캡슐화하십시오. 그런 다음 출력을 '1'로 변경하여 일치시킵니다. – Luke

답변

5

. 같은

뭔가 :

\bone\b 

그것을 할 것입니다. i 수정자를 가진 preg_replace은 PHP에서 사용하기를 원하는 것입니다.

정규식 데모 : https://regex101.com/r/GUxTWB/1

PHP 사용법 :

$words = array(
'/\bone\b/i' => 1, 
'/\btwo\b/i' => 2, 
'/\bthree\b/i' => 3 
); 
$str = 'One: This is one and two and someone three.'; 
echo preg_replace(array_keys($words), array_values($words), $str); 

PHP 데모 : https://eval.in/667239

출력 :

1 :이 1과 2 누군가 3.

입니다
+1

"\\ b'.implode ('\ b |', array_keys ($ words)). '\ b/i''는 배열에 단어가 있고 패턴이 없습니다. – AbraCadaver

+0

@AbraCadaver Yea는 배열 구조를 변경할 수있는 좋은 대안이 될 수 있습니다. – chris85

2

당신은 preg_replace이다에서 워드 경계로 \ B를 사용할 수 있습니다 : 당신은 단어의 일치를 요구하는 정규식에 word boundries을 사용할 수 있습니다

foreach ($words as $k=>$v) { 
    $str = preg_replace("/\b$k\b/i", $v, $str); 
} 
0

이 함수는 PHP에서 일부 단어를 대체하지만 문자는 대체하지 못하도록 도와줍니다. 그것은

<?PHP 
     function removePrepositions($text){ 

      $propositions=array('/\bthe\b/i','/\bor\b/i', '/\ba\b/i', '/\band\b/i', '/\babout\b/i', '/\babove\b/i'); 

      if(count($propositions) > 0) { 
       foreach($propositions as $exceptionPhrase) { 
        $text = preg_replace($exceptionPhrase, '', trim($text)); 

       } 
      $retval = trim($text); 

      } 
     return $retval; 
    } 

?> 

당신은 적어도 하나의 인용, 한 세미콜론 누락하고있는 whole example

관련 문제