Edit report at https://bugs.php.net/bug.php?id=61054&edit=1

 ID:                 61054
 User updated by:    gzpan123 at gmail dot com
 Reported by:        gzpan123 at gmail dot com
 Summary:            preg_match () matching end of line in text file of
                     windows style make a mistake
 Status:             Not a bug
 Type:               Bug
 Package:            PCRE related
 Operating System:   Windows,linux all
 PHP Version:        5.3.10
 Block user comment: N
 Private report:     N

 New Comment:

Yes,thanks.That is it


Previous Comments:
------------------------------------------------------------------------
[2012-02-15 05:19:46] ras...@php.net

Ok. here is my guess at what is confusing you.

By default PCRE uses \n to indicate the end of a line. Your files have \r\n at 
the end, so I think the only confusion you have is that your second match will 
have \r included in it and when you then print this on the console it looks 
essentially invisible.

In your latest example there, try changing your output line to this:

echo $matches[1].trim($matches[2]);

Does it make more sense now?

------------------------------------------------------------------------
[2012-02-15 04:48:43] gzpan123 at gmail dot com

$matches[2] follow character <CR>

------------------------------------------------------------------------
[2012-02-15 04:44:28] gzpan123 at gmail dot com

Test script:
---------------
<?php
$file = fopen("test.txt","r");
while(!feof($file)){
        $line = fgets($file);
        preg_match('/^(.+) (.+)$/',$line,$matches);
        echo $line;     
        if(array_key_exists(1, $matches) && array_key_exists(2, $matches))
        echo $matches[1].$matches[2];
}
fclose($file);
?>
test.txt must be created in windows
abc def
ghi jklm
nop

Expected result:
----------
abc def
abcdef
ghi jklm
ghijklm
nop

Actual result:
----------
abc def
ghi jklm
nopjklm

------------------------------------------------------------------------
[2012-02-15 01:06:29] ahar...@php.net

I don't understand the issue either. The code behaves the same way for me 
regardless of the line ending in test.txt.

Can you provide a simpler example, please?

------------------------------------------------------------------------
[2012-02-12 12:42:59] ni...@php.net

I don't really understand the issue you have from your example, but in general 
LF is the compile-default linebreak for PCRE. If you want to use a different 
linebreak character you can either compile PCRE with the appropriate option or 
specify a control option like (*CRLF) before your regular expression.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=61054


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=61054&edit=1

Reply via email to