Dotan Cohen wrote: > 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); > > 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... there are just two things you need to learn regular expressions: the PHP-manual: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php http://www.php.net/manual/en/reference.pcre.pattern.syntax.php http://www.php.net/manual/en/ref.pcre.php http://www.php.net/manual/en/ref.regex.php and the regex coach: http://www.weitz.de/regex-coach/ -- Sebastian Mendel www.sebastianmendel.de www.sf.net/projects/phpdatetime | www.sf.net/projects/phptimesheet -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php