You are here: Re: [PHP] Re: Converting [and] to XML format- help/advise requested « PHP « IT news, forums, messages
Re: [PHP] Re: Converting [and] to XML format- help/advise requested

Posted by Sebastian Mendel on 06/16/05 10:29

Dotan Cohen wrote:
> 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);
>
> 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

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация