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