On 6/15/05, Sebastian Mendel <lists@xxxxxxxxxxxxxxxxxx> 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 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php