2013-07-23 3 views
1

저는 PHP 튜토리얼을 많이 읽었을지라도 PHP &을 처음 사용합니다. 이해해주십시오. :)문자열의 단어에 대한 preg_replace()

내 의도 : 전체 텍스트 검색의 경우 단어 목록에 포함 된 맞춤 단어로 대체하려고합니다. 발견 된 문자열 대신 다른 단어의 일부로 전체 단어를 얻으려면 preg_replace()에 str_replace() 대신 특정 패턴을 사용해야합니다.

내 문제 : 특정 단어는 [사과], I, 즉 [전체 텍스트 검색 짧은 사과] 예와 [전체 텍스트 검색 짧은 텍스트]를 대체하려고 해요하여 예 단어의 목록의 일부인 경우 . 당연히 마지막 문자열은 [풀 애플릿 검색의 짧은 사과]처럼 보이거나 구분 기호 경고가 표시됩니다.

그래서 preg_replace() 함수가 전체 단어를 바꾸기위한 패턴을 알아 내려고 노력하고 있습니다. 그리고 그 위에 필자는 연관 배열에서 단어 쌍을 꺼내 목록의 더 나은 개요를 갖습니다. 이것은 내가 초보자 인 곳이다.

내 시험 :

$replacements = array( 'text' => 'apples', etc… ); $pattern = '#\b'($searchterm)'\b#; $searchterm = preg_replace(array_keys($replacements), $pattern, $searchterm); echo $searchterm; 

는 당신의 도움을 주셔서 감사합니다!

+0

당신은 preg_replace' '에 대한 설명서를 확인해야합니다. preg-replace.php – jeroen

+0

'$ searchterm'의 예를 들려 줄 수 있습니까? – srain

+0

설명서를 읽었지만 여전히 주위를 둘러 볼 수는 없습니다. @srain : $ searchterm 변수는 단순한 문자열을 포함합니다. 아마 세 개 이상의 다른 단어는 없을 것입니다. – Tobias

답변

1

strtr으로 충분할 수 있습니다. .

결합 단어 내의 전체 단어가 아닌 대체 단어를 대체하기 위해 대체 머리글 끝에 머리말 blank을 추가 할 수 있습니다.

<?php 
$replacements = array(
    'text' => 'apples', 
); 

$realRreplacements = array(); 
foreach ($replacements as $from => $to) 
{ 
    $from = ' ' . $from . ' '; 
    $to = ' ' . $to . ' '; 
    $realRreplacements[$from] = $to; 
} 

$str = 'Short text in a fulltext search'; 
$str = strtr($str, $realRreplacements); 
echo $str, "\n"; 
// output: Short apples in a fulltext search 

은 - preg_replace 다시

     ************ update ************* 

차례 : http://php.net/manual/en/function :

<?php 
$list = array(
    'text' => 'apples', 
    'Short' => 'Long', 
    'search' => 'find', 
); 
$pattens = array(); 
$replacement = array(); 
foreach ($list as $from => $to) 
{ 
    $from = '/\b' . $from . '\b/'; 
    $pattens[] = $from; 
    $replacement[] = $to; 
} 
$str = 'Short text in a fulltext search'; 
$str = preg_replace($pattens, $replacement, $str); 
echo $str, "\n"; // Long apples in a fulltext find 
+0

대단히 죄송합니다! 점심 식사를 마친 후 코드의 나머지 부분과 조화를 이루기 위해 몇 가지 개조 작업을 해본 결과, 나는 매력처럼 작동 할 수있었습니다. 확실히 뭔가 가르쳐 줬어. 그리고 친절하게 대해 줘서 고마워. :) – Tobias

+0

나는 내 의견을 읽었는데, 나는'어떤 사람이 당신의 downvote를주는 것을 꺼리지 않는다 '고 말했고,'not'을 그리워했다.^_ ^. – srain

+0

예, 그렇게 생각합니다 :) – Tobias

관련 문제