Re: Regular Expression Problem
| From: | Ashley Sheridan | Date: | Thu, 26 Feb 2009 16:20:49 +0000 |
| Subject: | Re: Regular Expression Problem | ||
| References: | 1 2 3 4 5 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-288827@lists.php.net to get a copy of this message | ||
On Thu, 2009-02-26 at 10:09 -0500, Alice Wei wrote:
> Hi,
>
> I have two lines here as follows:
>
> 1 -0.123701962557954E+03 0.460967618024691E+02
> -0.123547659000000E+03 0.462591090000000E+02
>
> What I am trying to do here is to only have
>
> 1 -0.123701962557954E+03 0.460967618024691E+02 be the output so I can do further
> processing with it, however, with the code I have in the following, I have both lines in the output.
> Here is the code:
>
> $file = "test.txt";
> $fp = fopen($file, "r");
> $lines = file($file);
>
> foreach($lines as $line_num => $line)
> {
> if (preg_match("/([^0-9]+\s+)(\-?\d+\.?\d+(\+?E?\d+)?){2}/", $line))
>
> echo $line;
>
> }
>
> Could anyone please tell me that even when I specify that the line has to start with [^0-9]+\s
> with one occurrence, why I still get -0.123547659000000E+03 0.462591090000000E+02?
>
> Thanks a lot for your help.
>
> Alice
>
>
> _________________________________________________________________
> Express yourself with gadgets on Windows Live Spaces
> http://discoverspaces.live.com?source=hmtag1&loc=us
what about a regex something like:
/^(\d{1,})\s+([\d\.E\+\-])+\s+([\d\.E\+\-])+$/
The brackets () allow you to then extract the specific portions of the
string as you wish, so the first match is the whole line, the second is
the 1 (or whatever other number), the third is the first floating-point
number, etc.
I'm assuming that the 1 here is some sort of line number possibly? The
bit inside the curly braces ({1,}) just says to match the digit 1 or
more times. You can limit it by adding a number after the comma, so
{1,3} for 1-3 digits.
Hope this helps?
Ash
www.ashleysheridan.co.uk