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.


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


[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