split with regex

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Patrick

    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
  • Rami Elomaa

    #2
    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,$ filename);
    list($a, $b, $c,) = $matches;

    HTH

    --
    Rami.Elomaa@gma il.com

    "Wikipedia on vähän niinq internetin raamattu, kukaan ei pohjimmiltaan
    usko siihen ja kukaan ei tiedä mikä pitää paikkansa." -- z00ze

    Comment

    • Aerik

      #3
      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})/",$filename ,
      $matches);
      //print_r($matche s);
      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


      Comment

      • Patrick

        #4
        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})/",$filename ,
        $matches);
        //print_r($matche s);
        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

        Comment

        Working...