2016-12-29 3 views
0

Я работаю над проектом, где у меня есть строка с содержимым, например. $content и массив со словами (без капителей), например. $rewrites.Замена заглавной и некапитализированной строки с preg_replace

То, что я хочу достичь, например, случай:

$content содержит строку со следующим текстом: "Яблоки множественного яблока, яблоки вкусные.

$rewrites содержит массив со следующими данными: «яблоко», «голубика».

Теперь я хочу создать функцию, которая заменяет все яблоки на что-то еще, например. малина. Но в строке есть Яблоки, которые не будут заменены с помощью 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

могли бы вы просто добавить 'Apple', 'Blueberry' в файл 'массив 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 

 Смежные вопросы

  • Нет связанных вопросов^_^