nahrazovani s Regularnimi vyrazy
Petr Sturc
sturc na fzu.cz
Čtvrtek Leden 6 08:31:03 MET 2000
On Thu, 6 Jan 2000 06:38:29 +0100, Jakub Zlamal <zlamal na fyzika.fme.vutbr.cz>
wrote:
>Dobry den, umim zjistit jestli se v retezci vyskytuje regukarni vyraz, ale
>neumim RV pouzivat v zamenovani a ve funkci index. Konkretne mi jde o toto:
>$line="<:25,2Times Roman15,0>Text<:11,5Symbol8,9>W<:12,3Times Roman18,3>"
>potreboval bych v $line najit text mezi /<:.*Symbol.*>/ a /<:/ a zamenit za:
>@@text@@ tedy potreboval bych to W obalit @@W@@ pritom to <:11,5Symbol8,9> by
>v $line melo zustat.
>
>Je to mozne nejak elegantne udelat?
Neslo by treba
$line=~s/(<:\d{1,2},\d{1,2}Symbol\d{1,2},\d{1,2}>)(\w+)(<:)/$1\@\@$2\@\@$3/;
To z vaseho $line udela
<:25,2Times Roman15,0>Text<:11,5Symbol8,9>@@W@@<:12,3Times Roman18,3>
Je to co jste chtel?
>Jde pouzit RV ve funkci index? tedy napr index($line,/<:.*Symbol.*>/)
>Me to vraci vzdy nulu. (pouzivam Perl pod Win32)
Mam za to, ze v index nemuzete RV pouzivat. Pouze substring.
Ale napr. preddefinovana promenna $` ($PREMATCH), obsahuje
retezec predchazejici posledni nalezenou shodu. Tedy to
co hledate je nejspis
$line=~m/<:.*Symbol.*>/;
length($`);
nebo
use English;
$line=~m/<:.*Symbol.*>/;
length($PREMATCH);
Doufam, ze to pomohlo.
Zdravi Petr Sturc
--
Petr Sturc <sturc na fzu.cz> http://www.fzu.cz/~sturc/
Dept. of Magnetism, Institute of Physics ASCR, Prague,Czech Rep.
Další informace o konferenci Perl