Home > Software design >  Get the last letter and everything after it in PHP
Get the last letter and everything after it in PHP

Time:10-21

I have a few hundred thousand strings that are laid out like the following

AX23784268B2
LJ93842938A1
MN39423287S
IY289383N2

With PHP I'm racking my brain how to return B2, A1, S, and N2.

Tried all sorts of substr, strstr, strlen manipulation and am coming up short.

substr('MN39423287S', -2); ?> // returns 7S, not S

CodePudding user response:

This is a simpler regexp than the other answer:

preg_match('/[A-Z][^A-Z]*$/', $token, $matches);
echo $matches[0];

[A-Z] matches a letter, [^A-Z] matches a non-letter. * makes the preceiding pattern match any number of times (including 0), and $ matches the end of the string.

So this matches a letter followed by any number of non-letters at the end of the string.

$matches[0] contains the portion of the string that the entire regexp matched.

CodePudding user response:

There's many way to do this.
One example would be a regex


<?php

$regex = "/. ([A-Z].? )$/";

$tokens = [
'AX23784268B2',
'LJ93842938A1',
'MN39423287S',
'IY289383N2',
];

foreach($tokens as $token)
{
    preg_match($regex, $token, $matches);
    var_dump($matches[1]);  
    // B2, A2, S, N2
}

How the regex works;

.        - any character except newline
(        - create a group
  [A-Z]  - match any A-Z character
  .?     - also match any characters after it, if any
)        - end group
$        - match the end of the string
  • Related