Autor Zpráva
Ladinek
Profil *
Na internetu jsem nalezl script, který odstraňuje samohlásky přímo z textu. Bohužel odstraňuje to naprosto všude. Potřebuji, aby se samohlásky odstraňovali pouze na konci daných slov.

$yourString = "File Name Of Hello";
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U", " ");
$yourString = str_replace($vowels, "", $yourString);
echo $yourString; //FlNmfHll
Alphard
Profil
Ladinek:
Nejsi náhodou PetraPP?

Ten script je třeba rozšířit. Takhle hledá jednotlivé znaky, kdyby se např. hledalo 'a ', 'e ', ... (zdůrazňuji mezeru za každou samohláskou), a nahrazovalo se za mezeru, byl by problém vyřešen pro slova následovaná mezerou.
Když si uvědomíme, že ve větě jsou slova následována interpunkčními znaménky, vede nás to k použití regulárních výrazů, kde místo mezery dáme celý výčet znaků (pozor na ošetření posledního slova). A na závěr dáme i samotné samohlásky jako výčet, aby se nahradilo i více samohlásek za sebou.

Jiný přístup, a myslím že lépe škálovatelný, by bylo rozdělit vstupní text na jednotlivá slova podle mezery (a případně dalších znaků), získat pole vstupních slov a ta samostatně ořezávat.
mimochodec
Profil
Alphard:
Já myslím, že "pouze na konci daných slov" celé zadání poněkud zjednodušuje. Jen nevím, jestli má php nějakou funkci, které by se dal zadat text a dvě pole a chtít po ní, aby nahradila položky z jednoho pole vždy patřičnou položkou druhého.
Pokud taková funkce není, je to otázka jednoho cyklu.
Alphard
Profil
mimochodec:
Jen nevím, jestli má php nějakou funkci, které by se dal zadat text a dvě pole a chtít po ní, aby nahradila položky z jednoho pole vždy patřičnou položkou druhého.
Umí to zde použitý str_replace(). Případně strtr() bere asociativní pole.
Tomáš3
Profil *
Půjčil jsem si popis řešení od [#2] Alphard a tady je ten regulár ;)

<?php
mb_internal_encoding('utf-8'); //support utf8 chars in regulars (áéíóúů)
$text = 'File Name Of Hello. File Name Of Hello? File Name Of Hellooo';
$result = preg_replace('/[aeiouáéíóúů]+([\ \n.,?!:]|$)/ui', '$1', $text);

var_dump($result); // string(49) "Fil Nam Of Hell. Fil Nam Of Hell? Fil Nam Of Hell"

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: