Regulární výraz pro předponu

Regulární výraz pro předponu
« kdy: 27. 01. 2014, 15:26:04 »
Zdravím, potřeboval bych poradit s regulárním výrazem. Nevím odkud začít, je to složitější problém, pro začátek začnu od toho nejednoduššího příkladu. Dejme tomu, že kořen který hledám je slovo "to". Slovo to chci najít. Pokud se ale před slovem to vyskytuje písmeno v, tak ho chci zahrnout do výsledku. Toto umím vyřešit. Použiju předlohu

Kód: [Vybrat]
v?to
Pokud ale ve větš budou další podobné slova obsahující slovo to, např. oto, toto, nato, ato, atd. tak budou vyhledána i tato slova, respektive jejich podřetězec - a to já nechci. Jak tedy vytvořit předlohu, která vyhledá pouze ty slova, která mohou obsahovat předponu, ale tato předpona se nezkládá ze znaků, které nejsou v...

Je to ještě složitější, protože ve skutečnosti, to slovo může mít ještě proměnlivou koncovku...
« Poslední změna: 27. 01. 2014, 17:57:01 od Roman Bořánek »


pepak

Re:regulární výraz pro předponu
« Odpověď #1 kdy: 27. 01. 2014, 15:39:21 »
Pokud ale ve větš budou další podobné slova obsahující slovo to, např. oto, toto, nato, ato, atd. tak budou vyhledána i tato slova, respektive jejich podřetězec - a to já nechci. Jak tedy vytvořit předlohu, která vyhledá pouze ty slova, která mohou obsahovat předponu, ale tato předpona se nezkládá ze znaků, které nejsou v...
Kód: [Vybrat]
\b((predpona1|predpona2|predpona3)?koren(pripona1|pripona2|pripona3)?)\b

Re:regulární výraz pro předponu
« Odpověď #2 kdy: 27. 01. 2014, 17:08:32 »
Nakonec jsem to vyřešil sám. Mám na to dvě předlohy:


Kód: [Vybrat]
(?:[^cdkprmt])oje[tl].?
(?:[^cdkprmt])ojed[ueo][usm]?

Testováno na větách:

Kód: [Vybrat]
$str='Tvoje auto je vojete. Otec, dojel v cas. Kojeni neni dojeni. Vojedu tvoje auto klicema. Projedu se autem. Dojedu az zitra. ';
Správný výsledek poté co jsem našel a zaměnil nalezené výsledky:

Tvoje auto je ******. Otec, dojel v cas. Kojeni neni dojeni. ****** tvoje auto klicema. Projedu se autem. Dojedu az zitra.

Pozn: před tím než provedu záměnu převádím dočasně text na text bez diakritiky a bez mezer, proto by hranice slova nejspíš nefungovaly.

Jinak jsem zkoušel k té moji (?:) přidat ještě alternativu |v? ale to nefunguje, protože v tom případě by to našlo a zahvězdičkovalo slova jako projel, dojel, apod.

Re:regulární výraz pro předponu
« Odpověď #3 kdy: 27. 01. 2014, 17:33:32 »
Vlastně ještě bych měl počítat s možností že slovo bude na začátku řetězce

Kód: [Vybrat]
(?:[^cdkprmt]|^)oje[tl].?
Kód: [Vybrat]
(?:[^cdkprmt]|^)ojed[ueo][usm]?