PHP는

2012-11-01 6 views
0

여기 내 문제가 정확한 단어를 대체합니다.PHP는

내 문자열을 다음과 같이 표시하고 싶습니다. word\word and ***.

이것이 가능합니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까???

LATER 편집

내가 URL을 배열을 가지고, 그 배열을 foreach는 및 URL이 발견되는 텍스트를 preg_replace이다,하지만 작동하지 않습니다. 나는 그것이 또한 http://www.link.com/something을 대체 http://www.link.com이있는 경우

는 예를 들어, 나는 http://www.link.com

http://www.link.com/something 있습니다.

+0

그 밖의 것들이 있습니까? 단어가 항상 문자열의 끝 부분에 있습니까? 이전의 것들은 항상 백 슬래시 근처에 있습니까? – deceze

+2

백 슬래시도 단어 경계이기 때문에'\ b' 대신에'\ s'가 필요할 것입니다 :) 물론'\ s'는 문자열의 시작/끝 부분에서 일치하지 않습니다. –

+0

어쩌면 $ 텍스트를 공백으로 배열로 배열 한 다음 앞뒤에 공백을 넣고 word = word \ word로 남겨두면 다른 단어를 ***로 변경할 수 있습니까? – Chris

답변

2

효과적으로 특정 문자를 단어 경계로 간주하지 않도록 지정하고 있습니다. 이것은 무엇을

preg_replace('@(^|[^\w\\])(word)([^\w\\]|$)@','**',$text); 

가 다시 제외 라인 경계 또는 비 단어 문자로 둘러싸인 단어에 대한 검색이 \ 슬래시입니다 : 따라서 당신은 자신을 "경계"를 지정하려면이 같은 필요합니다. 따라서 .word,은 일치하지만 \ word가 아닌 .word \이 아닙니다. 다른 문자를 일치시키지 않으려면 대괄호 안에 추가하십시오.

0

그냥 str_replace("word\word", "word\word and")을 사용할 수 있습니다. 위의 경우에 preg_replace를 사용해야하는 이유는 무엇인지 알 수 없습니다.

+0

그는 '단어 \ 문구'를 바꾸고 싶지 않습니다. –

+0

이것은 OP가 요구하는 것이 아니며 특정 단어 경계. –

+0

예, 답을 추가 한 후 몇 차례 질문을 편집했습니다. 별로 이상하지 않은 나의 대답은 그때 도움이되지 않습니까? – svenbravo7

0

다음은 정규식을 사용하지 않는 간단한 해결책입니다. 고독한 단어 인 경우 '단어'의 단일 어커런스 만 대체합니다.

<?php 
$text = "word\word word cat dog"; 
$new_text = ""; 
$words = explode(" ",$text); // split the string into seperate 'words' 

$inc = 0; // loop counter 
foreach($words as $word){ 

    if($word == "word"){ // if the current word in the array of words matches the criteria, replace it 
     $words[$inc] = "***"; 
    } 
    $new_text.= $words[$inc]." "; 
    $inC++; 
} 

echo $new_text; // gives 'word\word *** cat dog' 
?>