Re: removing text from a string

From: Date: Wed, 05 Nov 2008 16:41:45 +0000
Subject: Re: removing text from a string
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-282932@lists.php.net to get a copy of this message
Boyd, Todd M. wrote:
-----Original Message----- From: Ashley Sheridan [mailto:ash@ashleysheridan.co.uk] 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!! -- Thodoris

« previous php.general (#282932) next »