2016-12-29 15 views
0

私はコンテンツのある文字列を持つプロジェクトに取り組んでいます。、および単語を含む配列(大文字なし)。 $rewrites大文字と小文字を区別しない文字列をpreg_replaceに置き換えます。

私は何を達成したい、例の場合:「リンゴはリンゴの複数である、りんごはおいしいです」:

$contentは、次のテキスト文字列が含まれています。

$rewritesには、 'apple'、 'blueberry'というデータを含む配列が含まれています。

今、私は他の何かのためにすべてのリンゴを置き換える関数を作りたいと思います。ラズベリー。しかし、文字列にはAppleがあり、preg_replaceを使って置き換えられません。リンゴはラズベリーと交換する必要があります(首都Rに言及してください)。

私はさまざまな方法とパターンを試しましたが、動作しません。

現在、私は、私はその場で、様々な代替例を構築することにより、それをやった次のコード

foreach($rewrites as $rewrite){ 
     if(sp_match_string($rewrite->name, $content) && !in_array($rewrite->name, $spins) && $rewrite->name != $key){ 
     /* Replace the found parameter in the text */ 
     $content = str_replace($rewrite->name, $key, $content); 

     /* Register the spin */ 
     $spins[] = $key; 
     } 
    } 

function sp_match_string($needle, $haystack) { 

if (preg_match("/\b$needle\b/i", $haystack)) { 
    return true; 
} 
return false; 

} 
+0

は、あなたは自分の '$のrewrites'配列に 'アップル'、 'ブルーベリー' を追加することができますか? – BizzyBob

+0

@BizzyBobいいえ、不可能です。配列にそれらを追加すると、大文字の単語に置き換える必要があるかどうかが分かりません。 – Chiel

+0

私は大文字を検索し、大文字に置き換えると言っています。小文字を検索し、小文字で置き換えます。 – BizzyBob

答えて

0

を持っています。

$content = 'Apples is the plural of apple, apples are delicious'; 

$rewrites = array(
    array('apple', 'blueberry'), 
    array('apple', 'raspberry') 
); 

echo "$content\n"; 
foreach ($rewrites as $rule) { 
    $source = $rule[0]; 
    $target = $rule[1]; 

    // word and Word 
    $find = array($source, ucfirst($source)); 
    $replace = array($target, ucfirst($target)); 

    // add plurals for source 
    if (preg_match('/y$/', $source)) { 
     $find[] = preg_replace('/y$/', 'ies', $source); 
    } else { 
     $find[] = $source . 's'; 
    } 
    $find[] = ucfirst(end($find)); 

    // add plurals for target 
    if (preg_match('/y$/', $target)) { 
     $replace[] = preg_replace('/y$/', 'ies', $target); 
    } else { 
     $replace[] = $target . 's'; 
    } 
    $replace[] = ucfirst(end($replace)); 

    // pad with regex 
    foreach ($find as $i => $word) { 
     $find[$i] = '/\b' . preg_quote($word, '/') . '\b/'; 
    } 

    echo preg_replace($find, $replace, $content) . "\n"; 
} 

出力:

Apples is the plural of apple, apples are delicious 
Blueberries is the plural of blueberry, blueberries are delicious 
Raspberries is the plural of raspberry, raspberries are delicious 
関連する問題