|
Posted by Justin Koivisto on 10/23/59 11:43
Chung Leong wrote:
> Justin Koivisto wrote:
>> Disco Octopus wrote:
>>> Hi,
>>>
>>> I think I am need of a regular expression with regards to a str_replace
>>> need that I have...
>>>
>>> I have a string like this one...
>>>
>>> "text text text{
>>> text
>>> } text {text text } t {text} txt { text }"
>>>
>>> I need to replace all occurances of "{" with "{ " and "}" with " }" where
>>> the following rules apply...
>>>
>>> replace "{" with "{ " when the character to the right of "{" is NOT
>>> <newline> and is NOT <space> and is NOT <tab>.
>>>
>>> replace "}" with " }" when the character to the left of "}" is NOT
>>> <newline> and is NOT <space> and is NOT <tab>.
>>>
>>> So, the result in my example above would be....
>>>
>>> "text text text{
>>> text
>>> } text { text text } t { text } txt { text }"
>>>
>>> Would anyone possibly know how to do this?
>> You would need to use both a zero-width negative look-ahead and a
>> zero-width negative look-behind with prel style regex...
>>
>> <?php
>> $s =<<<EOS
>> text text text{
>> text
>> } text {text text } t {text} txt { text }
>> EOS;
>>
>> $search1='`\{(?![\s\r\n\t])`';
>> $replace1='{ ';
>> $s=preg_replace($search1,$replace1,$s);
>>
>> $search2='`(?<![\s\r\n\t])\}`';
>> $replace2=' }';
>> $s=preg_replace($search2,$replace2,$s);
>>
>> echo $s;
>> ?>
>>
> \r, \n, \t are covered by \s already, so there is no need to specify
> them separately.
That's what i thought, but I was too lazy to look it up. ;)
> The code can be further compacted by using array
> arguments to preg_replace():
>
> $search = array('`\{(?!\s)`', '`(?<!\s)\}`');
> $replace= array('{ ', ' }');
> $s=preg_replace($search,$replace,$s);
That is how I tested it, but then I pulled it apart for clarity of what
was going on.
--
Justin Koivisto, ZCE - justin@koivi.com
http://koivi.com
Navigation:
[Reply to this message]
|