Connecting Tech Pros Worldwide Forums | Help | Site Map

What is wrong in this code?

iulian.ilea
Guest
 
Posts: n/a
#1: Oct 19 '06
<?php
$string = "Copia (3) di Copia (99) di unita";
$val = "Copia (99) di unita";
if (eregi("Copia \(+[0-9]+\) di ".$val,$string))
{
$vara = explode("Copia (",$string);
$vara = explode(")",$vara[1]);
var_dump($vara);
$maxim = $vara[0];
}
else $maxim = 0;
?>

I always get $maxim = 0, so eregi is evaluated as false even if is
"Copia (number) di " in string. It works this way:

<?php
$string = "Copia (3) di unita";
$val = "Copia (3) di unita";
if (eregi("Copia \(+[0-9]+\) di ".$val,$string))
{
$vara = explode("Copia (",$string);
$vara = explode(")",$vara[1]);
var_dump($vara);
$maxim = $vara[0];
}
else $maxim = 0;
?>


Kimmo Laine
Guest
 
Posts: n/a
#2: Oct 19 '06

re: What is wrong in this code?


"iulian.ilea" <iulian.ilea@gmail.comwrote in message
news:1161253158.193150.10120@h48g2000cwc.googlegro ups.com...
Quote:
<?php
$string = "Copia (3) di Copia (99) di unita";
$val = "Copia (99) di unita";
if (eregi("Copia \(+[0-9]+\) di ".$val,$string))
The pattern here is
"Copia \(+[0-9]+\) di Copia (99) di unita"
the problem is the unescaped parenthesis. simple parenthesis have a special
meaning in regular expressions, they indicate a subpattern. It should be
"Copia \([0-9]+\) di Copia \(99\) di unita", ie. $val should be "Copia
\(99\) di unita".
Quote:
$vara = explode("Copia (",$string);
$vara = explode(")",$vara[1]);
var_dump($vara);
$maxim = $vara[0];
This could be done easier using the subpatterns you've accidently
discovered. Like:

if(preg_match("#Copia \(([0-9]+)\) di Copia \(99\) di unita#", $string,
$matches))
$maxim = $matches[1];


--
"Ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" - lpk
http://outolempi.net/ahdistus/ - Satunnaisesti päivittyvä nettisarjis
spam@outolempi.net | rot13(xvzzb@bhgbyrzcv.arg)


iulian.ilea
Guest
 
Posts: n/a
#3: Oct 20 '06

re: What is wrong in this code?



Kimmo Laine wrote:
Quote:
"iulian.ilea" <iulian.ilea@gmail.comwrote in message
news:1161253158.193150.10120@h48g2000cwc.googlegro ups.com...
Quote:
<?php
$string = "Copia (3) di Copia (99) di unita";
$val = "Copia (99) di unita";
if (eregi("Copia \(+[0-9]+\) di ".$val,$string))
>
The pattern here is
"Copia \(+[0-9]+\) di Copia (99) di unita"
the problem is the unescaped parenthesis. simple parenthesis have a special
meaning in regular expressions, they indicate a subpattern. It should be
"Copia \([0-9]+\) di Copia \(99\) di unita", ie. $val should be "Copia
\(99\) di unita".
>
Quote:
$vara = explode("Copia (",$string);
$vara = explode(")",$vara[1]);
var_dump($vara);
$maxim = $vara[0];
>
This could be done easier using the subpatterns you've accidently
discovered. Like:
>
if(preg_match("#Copia \(([0-9]+)\) di Copia \(99\) di unita#", $string,
$matches))
$maxim = $matches[1];
>
>
--
"Ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" - lpk
http://outolempi.net/ahdistus/ - Satunnaisesti päivittyvä nettisarjis
spam@outolempi.net | rot13(xvzzb@bhgbyrzcv.arg)
Yes, that was the problem. I read your message yesterday but I forgot
to post. Thanks!

Closed Thread