Re: PHP a predlozky

From: Paco (paco@seznam.cz)
Date: 01. 10. 2002, 19:26 CEST


> Chtel bych si udelat v PHP programek ktery by mi nahrazoval mezery za vsemi
> jednopismennymi predlozkami a i k o s u v z podle volby budto nbsp entitou
> (pro HTML) nebo "pevnou" mezerou #160 pro zalamovani obyc.textu. (Delam to
> u vsech predlozek i kdyz to podle normy neni nutne protoze mi to pak v textu
> pripada hezci). Ale nejak se mi to nedari dotahnout. Mam to cele zalozeno na
> Eregi_Replace(), pozna to predlozku :-) a nahradi mezeru ale nefunguje mi to
> kdyz je predlozek vice za sebou. Treba v "... a i proto ..." mi to tam nahradi
> jenom "... a~i proto ..." (~ je jako ta nahrada). Vedel by nekdo co s tim?
> Diky, Kalumet.

Vestirna opet v akci. :) Aspon ten regex kdybys poslal...

Vypada to, ze to asi detekujes takhle: '_(a|i|k|o|s|u|v|z)_', kde
_ je space. Pak je to ale pochopitelne blbe a jedna se o typickou
regexovou semantickou chybu. Pro smysluplne pouzivani regexu byva
dobre znat princip jejich prace. Je treba si uvedomit, ze ten regex
jednak jede po stringu sekvencne a za druhy je hladovej, takze kdyz
jednou nahradi _a~ tak uz nenajde _i_, jelikoz misto 1.space uz je
tam ~. Tady bude asi nejprostsim resenim udelat to dvoupruchodove,
treba takhle:

function predlozky($txt,$rep=''){
	$rep=$rep?$rep:chr(160);
	$p1=' (a|i|k|o|s|u|v|z) ';
	$p2=$rep.'(a|i|k|o|s|u|v|z) ';
return eregi_replace($p2,"$rep\\1$rep",eregi_replace($p1," \\1$rep",$txt));
}

Takze:

$txt='... a i o tom jiz s nim bylo ...';
$txt=predlozky($txt,'~');

by ti melo vratit '... a~i~o~tom jiz s~nim bylo ...'. Druhy
parametr fce je replacement, kdyz se vynecha, bude to default
nezlomitelna mezera. Pro HTML tam das ' ')

pako Paco. 


______________________________________________________________________
Reklama:
Jake bude pocasi? http://pocasi.seznam.cz



This archive was generated by hypermail 2.1.2 : 01. 10. 2002, 19:27 CEST