Re: Re: Converting [and] to XML format- help/advise requested

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux