Autor Zpráva
curo
Profil
Z textu by som potreboval vytiahnuť PRVÚ vetu.

Vstup:
Toto je veta č. 1. Toto je veta č. 2.

Výstup:
Toto je veta č. 1.

Ja som použil (.[^\.]+\.), lenže problém nastáva keď je v prvej vete napr. "č. 1"


Ďakujem za každú radu
flying gentleman
Profil
Jo, pripojuju se, taky by se mi to hodilo, obzvlast do rss vystupu.Bohužel ale neumím poradit.
A btw myslím, že php ještě není na takové úrovni, aby poznalo, kdy má brát tečku jako konec věty a kdy třeba jenom jako řadovou číslovku. Možná se ale mýlím.
Hugo
Profil
curo

Mozna by pomohlo otestovat jestli neni dalsi znak (po mezere) velke pismeno. To by melo osetrit vetsinu pripadu.
Leo
Profil
A jak definujete vetu? :-) Leo
flying gentleman
Profil
Leo: no vetsina vet konci teckou ne? a kdyz treba bude prvni veta koncit ! nebo ?, tak se vypisou misto jedne vety dve.
Leo
Profil
No ale ne vsechno, co konci teckou je veta :-) Leo
curo
Profil
hugo Väčšinou áno, ale nájdu sa aj vety " Krásne je aj vo V. Hágoch"

leo Možno by sa dala definovať, aj keď nikdy nie 100%.
Napr: min. počet slov 2. Pričom slovo nie je: skupina znakov bez medzery ukončená bodkou.
flying gentleman
Profil
Takže jak, jste schopni to někdo napsat? na mě se nedívejte, já php moc neumím (moc=vůbec).
Když tak to sem někdo hoďte.
Oswald
Profil
Obávám se, že čistě pomocí regexpu bez jazykové analýzy toho textu prostě konec věty určit nelze. Pokud se vyloučí možnost použití .?! v jiném významu, než je právě ukončení věty, tak na to by stačilo třeba:


^[^.!?]+[.?!]
flying gentleman
Profil
Připojím se k Hugovi, jestliže je znak po tečce, respektive po mezeře za tečkou velké písmeno, jedná se o další, tedy druhou větu, která už by neměla být vypsána. Nešlo by to nějak takhle?
Akorát to holt/d neumím zapsat:(
Oswald
Profil

^.+?[.?!](?=\s+[A-Z])
flying gentleman
Profil
Oswald: a muzes mi vysvetlit jak to pouzit? treba budu mit promennou article, ktera bude obsahovat cely clanek a ja z ni chci vytahnout jen prvni vetu, jak na to?
a co kdybych chtel vytahnout prvni dve? jak na tohle?
diky moc
Oswald
Profil
Tu první větu z toho dostaneš takhle:

$re = '/.+?[.?!](?=\s*[A-Z])/s';
preg_ match($re, $article, $found);
echo 'První věta: ' . $found[0];


Když budeš chtít všechny, tak by to šlo takhle:

$re = '/(?<=[.!?])\s+(?=[A-Z])/';
$found2 = preg_ split($re, $article);
echo 'První věta: ' . $found2[0];
echo 'Druhá věta: ' . $found2[1];


Je to sice taková pofidérní metoda, ale ten nápad z velkým písmenem funguje celkem dobře.
flying gentleman
Profil
Oswald, díky moc, krásně to funguje.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0