Steeve Steeve - 2 months ago 7
PHP Question

regex to replace any word with two capital letters

I want to replace any word which contains two capital letters .

here is my string

jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTW
jennie-garth-jennie-garth3892-H9rDcbY


i want to replace -If9aSpTW with -

These
-If9aSpTW
varies so I can't use
str_replace
. I can identify with only two capital letter in one word. These words are at the end, but these types of words are appearing for 20% of total database values so I can't replace all last words.

Answer

The str_replace is context unaware, nor can you use substr since you need to check for 2 uppercase letters in the last non-hyphen chunk of the text. So you really have to stick to preg_replace regex based replacement.

You may use the following regex:

preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/', '', $str);

See the regex demo.

The pattern matches:

  • - - a hyphen
  • (?:[^-]*[A-Z]){2,} - 2 or more occurrences (due to {2,} limiting quantifier) of a sequence of:
    • [^-]*
    • [A-Z] - an uppercase
  • [^-]* - zero or more chars other than -
  • $ - end of string

PHP:

$str = 'jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTWe';
echo preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/', '', $str);