Regx to remove all characters after a match
I can not figure out why this is not printing just 123:
$name = "123\n456\n789";
$name =~ s/\n.*//;
print $name;
which outputs:
123
789
If I write it in php using preg_replace , it works!
Re: Regx to remove all characters after a match
Duke of Hazard wrote:
> I can not figure out why this is not printing just 123:
>
> $name = "123\n456\n789";
>
> $name =~ s/\n.*//;
>
> print $name;
>
> which outputs:
>
> 123
> 789
That is because . matches any character *except* newline. If you want
it to match a newline as well then you have to use the /s option:
$name =~ s/\n.*//s;
John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall
Re: Regx to remove all characters after a match
On Thu, 17 Apr 2008 20:23:23 -0700 (PDT), Duke of Hazard
<squash [at] peoriadesignweb.com> wrote:
>I can not figure out why this is not printing just 123:
>
>$name = "123\n456\n789";
>
>$name =~ s/\n.*//;
>
>print $name;
>
>which outputs:
>
>123
>789
>
>If I write it in php using preg_replace , it works!
By default, '.' in Perl regexes does not match newline. If you want it
to match newline, use
$name =~ s/\n.*//s;
I don't know PHP, but it surprises me that it handles that case
differently.
--
Eric Amick
Columbia, MD
Re: Regx to remove all characters after a match
Eric Amick wrote:
> On Thu, 17 Apr 2008 20:23:23 -0700 (PDT), Duke of Hazard
> <squash [at] peoriadesignweb.com> wrote:
>
>> I can not figure out why this is not printing just 123:
>>
>> $name = "123\n456\n789";
>>
>> $name =~ s/\n.*//;
>>
>> print $name;
>>
>> which outputs:
>>
>> 123
>> 789
>>
>> If I write it in php using preg_replace , it works!
>
> By default, '.' in Perl regexes does not match newline. If you want it
> to match newline, use
>
> $name =~ s/\n.*//s;
>
> I don't know PHP, but it surprises me that it handles that case
> differently.
A bug in PHP?
--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl
Re: Regx to remove all characters after a match
_
Gunnar Hjalmarsson (noreply [at] gunnar.cc) wrote on VCCCXLIV September
MCMXCIII in <URL:news:66r3c2F2h2crbU1 [at] mid.individual.net>:
~~ Eric Amick wrote:
~~ > On Thu, 17 Apr 2008 20:23:23 -0700 (PDT), Duke of Hazard
~~ > <squash [at] peoriadesignweb.com> wrote:
~~ >
~~ >> I can not figure out why this is not printing just 123:
~~ >>
~~ >> $name = "123\n456\n789";
~~ >>
~~ >> $name =~ s/\n.*//;
~~ >>
~~ >> print $name;
~~ >>
~~ >> which outputs:
~~ >>
~~ >> 123
~~ >> 789
~~ >>
~~ >> If I write it in php using preg_replace , it works!
~~ >
~~ > By default, '.' in Perl regexes does not match newline. If you want it
~~ > to match newline, use
~~ >
~~ > $name =~ s/\n.*//s;
~~ >
~~ > I don't know PHP, but it surprises me that it handles that case
~~ > differently.
~~
~~ A bug in PHP?
It would do what the OP intended in Perl6 as well.
Abigail
--
tie $" => A; $, = " "; $\ = "\n"; [at] a = ("") x 2; print map {" [at] a"} 1 .. 4;
sub A::TIESCALAR {bless \my $A => A} # Yet Another silly JAPH by Abigail
sub A::FETCH { [at] q = qw /Just Another Perl Hacker/ unless [at] q; shift [at] q}
Re: Regx to remove all characters after a match
Abigail wrote:
> Gunnar Hjalmarsson (noreply [at] gunnar.cc) wrote on VCCCXLIV September
> MCMXCIII in <URL:news:66r3c2F2h2crbU1 [at] mid.individual.net>:
> ~~ Eric Amick wrote:
> ~~ > On Thu, 17 Apr 2008 20:23:23 -0700 (PDT), Duke of Hazard
> ~~ > <squash [at] peoriadesignweb.com> wrote:
> ~~ >
> ~~ >> I can not figure out why this is not printing just 123:
> ~~ >>
> ~~ >> $name = "123\n456\n789";
> ~~ >>
> ~~ >> $name =~ s/\n.*//;
> ~~ >>
> ~~ >> print $name;
> ~~ >>
> ~~ >> which outputs:
> ~~ >>
> ~~ >> 123
> ~~ >> 789
> ~~ >>
> ~~ >> If I write it in php using preg_replace , it works!
> ~~ >
> ~~ > By default, '.' in Perl regexes does not match newline. If you want it
> ~~ > to match newline, use
> ~~ >
> ~~ > $name =~ s/\n.*//s;
> ~~ >
> ~~ > I don't know PHP, but it surprises me that it handles that case
> ~~ > differently.
> ~~
> ~~ A bug in PHP?
>
> It would do what the OP intended in Perl6 as well.
Maybe so, but the PHP docs say:
".
match any character except newline (by default)"
And still:
$ cat test.php
#!/usr/bin/php
<?php echo preg_replace('/\n.*/', '', "123\n456\n789") ?>
$ ./test.php
Content-type: text/html
X-Powered-By: PHP/4.3.3
123
$
--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl