split with regex

Hello All,

Been beating my head on the wall trying to get this working. Especially
because of my *tweener level of php and regex experience.

I have this $filename = C17AA001.000

I want to split it like this $a = C17AA $b = 001 $c = .000

I have tried this but can't get it to work.

list($a, $b, $c,) = split("^[0-9a-zA-Z]{5}[0-9]{3}\.[0-9]{3}",$filename);

echo $a;
echo $b;
echo $c;

What am I missing here? Two days of googling and php.net have not
cleared me up.

Patrick



*tweener - between novice and guru
patrick [ Fr, 04 Mai 2007 19:35 ] [ ID #1704705 ]

Re: split with regex

Post removed (X-No-Archive: yes)
Notifier Deamon [ Fr, 04 Mai 2007 20:28 ] [ ID #1704706 ]

Re: split with regex

Patrick kirjoitti:
> Hello All,
>
> Been beating my head on the wall trying to get this working. Especially
> because of my *tweener level of php and regex experience.
>
> I have this $filename = C17AA001.000
>
> I want to split it like this $a = C17AA $b = 001 $c = .000
>
> I have tried this but can't get it to work.
>
> list($a, $b, $c,) = split("^[0-9a-zA-Z]{5}[0-9]{3}\.[0-9]{3}",$filename);
>
> echo $a;
> echo $b;
> echo $c;
>
> What am I missing here? Two days of googling and php.net have not
> cleared me up.

The reg ex argument you give to split is not the entire string pattern,
just the delimiter. You tell what pattern splits the string into pieces.
Now you're giving it the entire string pattern that does match the
whole string but so it basicly splits the string into two, the empty
before the string and the empty after the string.

You should be using preg_match 'stead of split. Try something like this:

preg_match("^[0-9a-zA-Z]{5}[0-9]{3}\.[0-9]{3}",$matches,$fil ename);
list($a, $b, $c,) = $matches;

HTH

--
Rami.Elomaa [at] gmail.com

"Wikipedia on vähän niinq internetin raamattu, kukaan ei pohjimmiltaan
usko siihen ja kukaan ei tiedä mikä pitää paikkansa." -- z00ze
Rami Elomaa [ Fr, 04 Mai 2007 20:44 ] [ ID #1704707 ]

Re: split with regex

You're using split wrong - it's for "splitting it on boundaries formed
by the case-sensitive regular expression" - the regex is the dividing
boundary, not the text you're matching.

Try this:

$filename = 'C17AA001.000';
preg_match("/([0-9a-zA-Z]{5})([0-9]{3})(\.[0-9]{3})/",$filen ame,
$matches);
//print_r($matches);
list($x, $a, $b, $c,) = $matches;//discard x
echo $a;
echo $b;
echo $c;

Aerik (a tweener myself)
http://www.wikidweb.com - the Wiki Directory of the Web
Aerik [ Fr, 04 Mai 2007 20:53 ] [ ID #1704708 ]

Re: split with regex

Aerik wrote:

> You're using split wrong - it's for "splitting it on boundaries formed
> by the case-sensitive regular expression" - the regex is the dividing
> boundary, not the text you're matching.
>
> Try this:
>
> $filename = 'C17AA001.000';
> preg_match("/([0-9a-zA-Z]{5})([0-9]{3})(\.[0-9]{3})/",$filen ame,
> $matches);
> //print_r($matches);
> list($x, $a, $b, $c,) = $matches;//discard x
> echo $a;
> echo $b;
> echo $c;
>
> Aerik (a tweener myself)
> http://www.wikidweb.com - the Wiki Directory of the Web
>
>

Sweet and thanks. That did it for me. And being able to get that part
working allowed me to finish and successfully test my php script which
basically renames a directory of files from

this

C17AC000.000
C17AC001.000
C17AC002.000
C17AC003.000
C17AC004.000
C17AC005.000
C17AC006.000

to this

C17AC.000
C17AC.001
C17AC.002
C17AC.003
C17AC.004
C17AC.005
C17AC.006

Regards,
Patrick
patrick [ Fr, 04 Mai 2007 21:43 ] [ ID #1704709 ]

Re: split with regex

Patrick kirjoitti:
> Hello All,
>
> Been beating my head on the wall trying to get this working. Especially
> because of my *tweener level of php and regex experience.
>
> I have this $filename = C17AA001.000
>
> I want to split it like this $a = C17AA $b = 001 $c = .000
>
> I have tried this but can't get it to work.
>
> list($a, $b, $c,) = split("^[0-9a-zA-Z]{5}[0-9]{3}\.[0-9]{3}",$filename);
>
> echo $a;
> echo $b;
> echo $c;
>
> What am I missing here? Two days of googling and php.net have not
> cleared me up.

The reg ex argument you give to split is not the entire string pattern,
just the delimiter. You tell what pattern splits the string into pieces.
Now you're giving it the entire string pattern that does match the
whole string but so it basicly splits the string into two, the empty
before the string and the empty after the string.

You should be using preg_match 'stead of split. Try something like this:

preg_match("^[0-9a-zA-Z]{5}[0-9]{3}\.[0-9]{3}",$matches,$fil ename);
list($a, $b, $c,) = $matches;

HTH

--
Rami.Elomaa [at] gmail.com

"Wikipedia on vähän niinq internetin raamattu, kukaan ei pohjimmiltaan
usko siihen ja kukaan ei tiedä mikä pitää paikkansa." -- z00ze
Rami Elomaa [ Fr, 04 Mai 2007 20:44 ] [ ID #1704774 ]

Re: split with regex

You're using split wrong - it's for "splitting it on boundaries formed
by the case-sensitive regular expression" - the regex is the dividing
boundary, not the text you're matching.

Try this:

$filename = 'C17AA001.000';
preg_match("/([0-9a-zA-Z]{5})([0-9]{3})(\.[0-9]{3})/",$filen ame,
$matches);
//print_r($matches);
list($x, $a, $b, $c,) = $matches;//discard x
echo $a;
echo $b;
echo $c;

Aerik (a tweener myself)
http://www.wikidweb.com - the Wiki Directory of the Web
Aerik [ Fr, 04 Mai 2007 20:53 ] [ ID #1704776 ]

Re: split with regex

Aerik wrote:

> You're using split wrong - it's for "splitting it on boundaries formed
> by the case-sensitive regular expression" - the regex is the dividing
> boundary, not the text you're matching.
>
> Try this:
>
> $filename = 'C17AA001.000';
> preg_match("/([0-9a-zA-Z]{5})([0-9]{3})(\.[0-9]{3})/",$filen ame,
> $matches);
> //print_r($matches);
> list($x, $a, $b, $c,) = $matches;//discard x
> echo $a;
> echo $b;
> echo $c;
>
> Aerik (a tweener myself)
> http://www.wikidweb.com - the Wiki Directory of the Web
>
>

Sweet and thanks. That did it for me. And being able to get that part
working allowed me to finish and successfully test my php script which
basically renames a directory of files from

this

C17AC000.000
C17AC001.000
C17AC002.000
C17AC003.000
C17AC004.000
C17AC005.000
C17AC006.000

to this

C17AC.000
C17AC.001
C17AC.002
C17AC.003
C17AC.004
C17AC.005
C17AC.006

Regards,
Patrick
patrick [ Fr, 04 Mai 2007 21:43 ] [ ID #1704779 ]

RE: split with regex

Try with explode for the .
and then slit the 3 last characters!


--------------= Posted using GrabIt =----------------
------= Binary Usenet downloading made easy =---------
-= Get GrabIt for free from http://www.shemes.com/ =-
Armand B [ So, 06 Mai 2007 00:32 ] [ ID #1705780 ]
PHP » alt.php » split with regex

Vorheriges Thema: to reduce images weight is php a good solution..
Nächstes Thema: Function tables