Split string like 'something.jpg,123' into $filename and $number

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Martin Lucas-Smith

    Split string like 'something.jpg,123' into $filename and $number



    I am trying to take a string and split it into a filename and a number
    where the number is what follows the *last* instance of a comma in that
    string.

    Split and explode won't work because if the filename part of the original
    string contains a , then I end up with too many parts.

    if (!preg_match ('/^(.*),([0-9]+)$/', $string, $matches)) {throwError ();}
    also fails, because the first part of the regular expression becomes
    greedy if there is a , in it.


    I.e. can anyone suggest a solution such that

    $string = 'something.jpg, 123';
    returns:
    $matches['filename'] = something.jpg
    $matches['number'] = 123


    $string = 'something,foo. jpg,123';
    returns:
    $matches['filename'] = something,foo.j pg
    $matches['number'] = 123


    and ideally

    $string = 'somethingfoo.j pg123'; // No comma contained so it's invalid
    returns:
    false

    ?


    Martin Lucas-Smith www.geog.cam.ac.uk/~mvl22


  • Doc Dunning

    #2
    Re: Split string like 'something.jpg, 123' into $filename and $number

    Hi

    I suggest you need something like this, in the PHP Manual

    =============== ==========
    strrpos ( string haystack, char needle)


    Returns the numeric position of the last occurrence of needle in the
    haystack string. Note that the needle in this case can only be a single
    character. If a string is passed as the needle, then only the first
    character of that string will be used.

    If needle is not found, returns FALSE.

    =============== ==========

    Once you've got the position of the last comma, you can use substr to pick
    the portion of the string to the left and right of it.



    "Martin Lucas-Smith" <mvl22@cam.ac.u k> wrote in message
    news:Pine.SOL.4 .44.03120515372 30.17830-100000@orange.c si.cam.ac.uk...[color=blue]
    >
    >
    > I am trying to take a string and split it into a filename and a number
    > where the number is what follows the *last* instance of a comma in that
    > string.
    >
    > Split and explode won't work because if the filename part of the original
    > string contains a , then I end up with too many parts.
    >
    > if (!preg_match ('/^(.*),([0-9]+)$/', $string, $matches)) {throwError ();}
    > also fails, because the first part of the regular expression becomes
    > greedy if there is a , in it.
    >
    >
    > I.e. can anyone suggest a solution such that
    >
    > $string = 'something.jpg, 123';
    > returns:
    > $matches['filename'] = something.jpg
    > $matches['number'] = 123
    >
    >
    > $string = 'something,foo. jpg,123';
    > returns:
    > $matches['filename'] = something,foo.j pg
    > $matches['number'] = 123
    >
    >
    > and ideally
    >
    > $string = 'somethingfoo.j pg123'; // No comma contained so it's invalid
    > returns:
    > false
    >
    > ?
    >
    >
    > Martin Lucas-Smith www.geog.cam.ac.uk/~mvl22
    > www.lucas-smith.co.uk
    >[/color]


    Comment

    • Markus Ernst

      #3
      Re: Split string like 'something.jpg, 123' into $filename and $number

      "Martin Lucas-Smith" <mvl22@cam.ac.u k> schrieb im Newsbeitrag
      news:Pine.SOL.4 .44.03120515372 30.17830-100000@orange.c si.cam.ac.uk...[color=blue]
      >
      >
      > I am trying to take a string and split it into a filename and a number
      > where the number is what follows the *last* instance of a comma in that
      > string.
      >
      > Split and explode won't work because if the filename part of the original
      > string contains a , then I end up with too many parts.
      >
      > if (!preg_match ('/^(.*),([0-9]+)$/', $string, $matches)) {throwError ();}
      > also fails, because the first part of the regular expression becomes
      > greedy if there is a , in it.
      >
      >
      > I.e. can anyone suggest a solution such that
      >
      > $string = 'something.jpg, 123';
      > returns:
      > $matches['filename'] = something.jpg
      > $matches['number'] = 123
      >
      >
      > $string = 'something,foo. jpg,123';
      > returns:
      > $matches['filename'] = something,foo.j pg
      > $matches['number'] = 123
      >
      >
      > and ideally
      >
      > $string = 'somethingfoo.j pg123'; // No comma contained so it's invalid
      > returns:
      > false
      >
      > ?[/color]

      $array = explode(",",$st ring);
      $c = count($array);
      if($c<2) $matches = false;
      else {
      $matches['filename'] = "";
      for($i=0;$i<$c; $i++) {
      if($i==$c-1) $matches['number'] = $array[$i];
      else $matches['filename'] .= $array[$i].",";
      }
      $matches['filename'] = substr($matches['filename'], 0, -1);
      }

      HTH
      Markus


      Comment

      • R. Rajesh Jeba Anbiah

        #4
        Re: Split string like 'something.jpg, 123' into $filename and $number

        Martin Lucas-Smith <mvl22@cam.ac.u k> wrote in message news:<Pine.SOL. 4.44.0312051537 230.17830-100000@orange.c si.cam.ac.uk>.. .[color=blue]
        > I am trying to take a string and split it into a filename and a number
        > where the number is what follows the *last* instance of a comma in that
        > string.
        >
        > Split and explode won't work because if the filename part of the original
        > string contains a , then I end up with too many parts.
        >
        > if (!preg_match ('/^(.*),([0-9]+)$/', $string, $matches)) {throwError ();}
        > also fails, because the first part of the regular expression becomes
        > greedy if there is a , in it.
        >
        >
        > I.e. can anyone suggest a solution such that
        >
        > $string = 'something.jpg, 123';
        > returns:
        > $matches['filename'] = something.jpg
        > $matches['number'] = 123
        >
        >
        > $string = 'something,foo. jpg,123';
        > returns:
        > $matches['filename'] = something,foo.j pg
        > $matches['number'] = 123
        >
        >
        > and ideally
        >
        > $string = 'somethingfoo.j pg123'; // No comma contained so it's invalid
        > returns:
        > false[/color]

        /^(\w+,?\w+\.jpg ),(\d+)$/

        Done with "The Regex Coach" <http://www.weitz.de/regex-coach/>

        --
        "Silence is the only right answer for many wrong questions" --
        G.K.Moopanar, Politician
        Email: rrjanbiah-at-Y!com

        Comment

        Working...