Thodoris wrote:
> 
>> Boyd, Todd M. wrote:
>>  
>>>> -----Original Message-----
>>>> From: Ashley Sheridan [mailto:[EMAIL PROTECTED]
>>>> Sent: Tuesday, November 04, 2008 1:40 PM
>>>> To: Adam Williams
>>>> Cc: PHP General list
>>>> Subject: Re: [PHP] removing text from a string
>>>>
>>>> On Tue, 2008-11-04 at 08:04 -0600, Adam Williams wrote:
>>>>      
>>>>> I have a file that looks like:
>>>>>
>>>>> 1. Some Text here
>>>>> 2. Another Line of Text
>>>>> 3. Yet another line of text
>>>>> 340. All the way to number 340
>>>>>
>>>>> And I want to remove the Number, period, and blank space at the
>>>>>         
>>>> begining
>>>>      
>>>>> of each line.  How can I accomplish this?
>>>>>
>>>>> Opening the file to modify it is easy, I'm just lost at how to
>>>>>         
>>> remove
>>>    
>>>>> the text.:
>>>>>
>>>>> <?php
>>>>> $filename = "results.txt";
>>>>>
>>>>> $fp = fopen($filename, "r") or die ("Couldn't open $filename");
>>>>> if ($fp)
>>>>> {
>>>>> while (!feof($fp))
>>>>>         {
>>>>>         $thedata = fgets($fp);
>>>>>         //Do something to remove the "1. "
>>>>>         //print the modified line and \n
>>>>>         }
>>>>> fclose($fp);
>>>>> }
>>>>> ?>
>>>>>
>>>>>         
>>>> I'd go with a regular expression any day for something like this.
>>>> Something like:
>>>>
>>>> "/$[0-9]{1,3}\.\ .*^/g"
>>>>
>>>> should do what you need. Note the space before the last period.
>>>>       
>>> That would only work for files with 1-999 lines, and will wind up
>>> matching the entire line (since you used $ and ^ and a greedy .*
>>> inbetween... also... $ is "end-of-line" and ^ is "beginning-of-line" :))
>>> rather than just the "line number" part. I would stick with my
>>> originally-posted regex ("/^\d+\.\s/"), but I would modify yours like
>>> this if I were to use it instead:
>>>
>>> "/^[0-9]+\.\ (.*)$/" (What was the "g" modifier for, anyway?)
>>>
>>> Then, you could grab the capture group made with (.*) and use it as the
>>> "clean" data. (It would be group 1 in the match results and "$1" in a
>>> preg_replace() call, I believe. Group 0 should be the entire match.)
>>>
>>>
>>> Todd Boyd
>>> Web Programmer
>>>
>>>     
>>
>>
>> Personally, I would go this route if you wanted to stick with a regex.
>>
>> <?php
>>
>> $lines[] = '01. asdf';
>> $lines[] = '02. 323 asdf';
>> $lines[] = '03.2323 asdf';
>> $lines[] = '04. asdf 23';
>> $lines[] = '05.        asdf'; /* tabs used here */
>> $lines[] = '06. asdf';
>>
>> foreach ( $lines AS $line ) {
>>     echo preg_replace('/^[0-9]+\.\s*/', '', $line), "\n";
>> }
>>
>> ?>
>>
>> This takes care of all possible issues related to the char after the
>> first period.  Maybe it is there maybe not.
>>
>> Could be that it is a tab and not a space.  Could even be multiple
>> tabs or spaces.
>>
>>   
> 
> There it goes again.
> 
> Every time someone asks a simple question (like the kind it's solved
> with a simple trim, ltrim or rtrim) the discussion about which is the
> best regular expression for this problem, makes a thread get "elephant"
> sized :-) .
> 
> I love this list!!
> 

Your not going to be able to get it with any of the xtrim() functions.  you 
would end up with various nested ltrim() calls that, IMO, would be a
nightmare to manage.

So, a top to bottom comparison here

If $line is this:
$line = '01. asdf';

And you use either one of these:
A) ltrim(ltrim(ltrim($line, '0123456789'), '.'));
B) preg_replace('/^[0-9]+\.\s*/', '', $line);

Which do you prefer?

A's Pros:
        Not a regex
A's Cons:
        A little slower then B
        multiple function calls

B's Pros:
        Slightly faster then A
        Single Function call
B's Cons:
        Regex



-- 
Jim Lucas

   "Some men are born to greatness, some achieve greatness,
       and some have greatness thrust upon them."

Twelfth Night, Act II, Scene V
    by William Shakespeare


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

Reply via email to