Re: removing text from a string

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

 



Boyd, Todd M. wrote:
>> -----Original Message-----
>> From: Ashley Sheridan [mailto:ash@xxxxxxxxxxxxxxxxxxxx]
>> Sent: Tuesday, November 04, 2008 1:40 PM
>> To: Adam Williams
>> Cc: PHP General list
>> Subject: Re:  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.

-- 
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


[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