Autor Zpráva
noName
Profil *
Zdravím, potřeboval bych poradit jak rozdělit blok textu do pole. Takže když by byla věta: "Ahoj, jak se máš?" tak bych měl výstup array("ahoj", "jak", "se", "máš"). Mám následující kód:
        $text = str_replace(array(".", ". ", ", ", ",", "(", ")", "-", "/"), ' ', $text);
        preg_match_all("~[\pL\.]{3,}~ui", $text, $newText);

Zdá se mi, že to funguje tzn., že text rozdělí, ale ještě bych potřeboval odstranit u každé položky v poli na konci čárky, tečky, vykříčníky a pod. Díky za rady.
abc
Profil
noName:
$odstranit = array(".", ". ", ", ", ",", "(", ")", "-", "/", "!");//pridej si znaky, ktere chces odstranit
$text = "ahoj, jak se máš?";
$newText = str_replace($odstranit, " ", $text);
$newText = trim($newText);
$newText = explode(" ",$newText);
print_r($newText);
Keeehi
Profil
Už takhle to funguje skvěle, ale dá se to zjednodušit:
<?php
$text = "Ahoj, jak se máš?";
preg_match_all("~[\pL]{3,}~u", $text, $newText);
var_dump($newText); // Array ( [0] => Array ( [0] => Ahoj [1] => jak [2] => máš ) )
To že to vynechává předložky a spojky (dvoupísmenná slova) doufám víš. Jinak ještě třeba ze slova "uvaříme-li" vytvoří "uvaříme". No a čísla to taky ignoruje.
noName
Profil *
abc:
Díky.

Keeehi:
To že to vynechává předložky a spojky (dvoupísmenná slova) doufám víš
Ano, to vím. Je to schválně.

No a mohl by jsi mi poradit jak na ty čísla a "uvaříme-li"? Díky.
Keeehi
Profil
Jednoduše takto:
"~[-\pL\d]{3,}~u"
projde: Marek, petr5, 1265, uvaříme-li, dgb12-tg5g

"~(?<![-\pL\d])[-\pL]{3,}(?![-\pL\d])|(?<![-\pL\d])\d+(?![-\pL\d])~u"
z předchozích projde jen: Marek, 1265, uvaříme-li,

"~(?<![-\pL\d])[\pL]{3,}(?:-[\pL]{2,})?(?![-\pL\d])|(?<![-\pL\d])\d+(?![-\pL\d])~u"
jako předchozí, jen je trochu restriktivnější na použití pomlčky. Pokud je použita pomlčka, musí za ní následovat alespoň 2 znaky

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: