Question

I need help in fixing a string, i need to remove DIGITS from a string using "preg_replace" after the first two any characters of the string, examples can be:

  1. N02 [ Should remove 2 ]
  2. AX1001 [ Should remove 1001 ]
  3. AR2003 [ Should remove 2003 ]
  4. AR [ out put should be AR, because there are no digits ]

Currently am using: preg_replace( '/\d/', '', "A0123" );

But it removes digits from the start. Any one can help?

UPDATE:
AXZ1001 : in this case it should product AXZ
AX1001 : in this case it should product AX
A1001 : in this case it should product A1

Was it helpful?

Solution

You can use the \K feature:

$str = preg_replace('~\A.{2,}?\K[0-9]+~', '', $str);

Where \K removes all on the left from match result.

Since .{2,}? is a lazy quantifier, the fewest characters (but at least 2) are matched until a digit is found. It can be replaced by a greedy version with: ..[^0-9]*

If you want to deal with this kind of string: ABC123XYZ999 to obtain ABCXYZ:

$str = preg_replace('~(?:\A..|(?!\A)\G)[^0-9]*\K[0-9]+~', '', $str);

\G is an anchor for the end of the last match.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top