|
Posted by Dotan Cohen on 06/16/05 02:48
On 6/15/05, Sebastian Mendel <lists@sebastianmendel.de> wrote:
> Dotan Cohen wrote:
>
> >>> Hi gurus. I'm having fun replacing the text within [ and ] to XML
> >>> format on 4000+ files on a windows XP machine. I installed php (and an
> >>> apache server) on the machine because it is the only language the I am
> >>> remotely familiar with.
> >>>
> >>> I want and text that is with [ and ] to be enclosed with <note> and
> >>> </note>. Going through the archives I found this nice regex (I changed
> >>> it a bit- I hope that I didn't break anything important) that fits
> >>> into str_replace:
> >>>
> >>> str_replace("/[([a-zA-Z]+?)]/", "<note>".$what
> >>> was_inside_the_parethesis."</note>", $string);
> >> str_replace doesnt support regular expressions
> >>
> >> http://www.php.net/str_replace
> >>
> >> what you need is preg_replace()
> >>
> >> http://www.php.net/preg_replace
> >>
> >>
> >>> But how on sweet mother Earth do I get the $what
> >>> was_inside_the_parethesis variable to stick into the note tags? I
> >>> tried functions that would remove the [ and ], then do
> >>> $new_str="<note>".$what was_inside_the_parethesis."</note>";
> >>> and then replace the whole [$what was_inside_the_parethesis] with
> >>> $new_str. I did get that far.
> >> preg_replace( '/\[([^\]]+)\]/', '<note>\1</note>', $string);
> >>
> >>
> >>> Now the catch! If $what_was_inside_the_parethesis contains the word
> >>> 'algebra' then I want nothing returned- in other words [$what
> >>> was_inside_the_parethesis] should be cut out and nothing put in it's
> >>> place. I added an if function in there that checked the presence of
> >>> the word algebra, but it ALWAYS returned blank.
> >>
> >> preg_replace( '/\[(algebra|([^\]]+))\]/', '<note>\2</note>', $string);
> >>
> >>
> >> just to mention, you need only the second example, the first ist just to
> >> explain the step toward the final ocde.
> >
> > The code works great for [] tags that do not contain the word algebra.
> > If the word algebra is alone between the tags then it returns
> > <note></note>, which I can easily remove with one more line of code.
> > But if the word algebra appears with another word, then it is
> > converted to a note just as if it did not contain the word.
>
>
> $search = array(
> '/\[[^\]*algebra[^\]*\]/',
> '/\[([^\]]+)\]/',
> );
>
> $replace = array(
> '',
> '<note>\1</note>',
> );
>
> preg_replace( $search, $replace, $string);
>
>
> --
> Sebastian Mendel
>
> www.sebastianmendel.de
> www.sf.net/projects/phpdatetime | www.sf.net/projects/phptimesheet
>
Thank you Sebastian. Know that I not only appreciate your assistance,
but that I also make a genuine effort to learn from your example. I
think that it's about time that I learned to brew regexes. On my to
google now...
Dotan
http://lyricslist.com/lyrics/artist_albums/321/madonna.php
Madonna Lyrics
Navigation:
[Reply to this message]
|